2017-02-13 75 views
0

我正在寻找一种缩短我的代码的方法,并且找不到这个问题的答案。分别区分动态和手动分配的阵列键

$addressData = array(
    'Full Name', 
    'Address Line 1', 
    'Address Line 2', 
    30 => 'City/Town', 
    22 => 'Province/State/Region', 
    27 => 'Postal/ZIP code', 
    'Country', 
); 

前三个值将被分配的键0,1,和2:

在该取样阵列。最后一个值(国家)将被分配键31.

当我走过这个数组时,有什么办法可以用不同于自动赋值的方式处理那些手动赋值的值吗?

我在手册中找不到任何内容,但我认为社区可能会提供帮助。

编辑为进一步澄清。这不是真正的代码,但它说明了我希望实现什么:

foreach($addressData as $key => $value){ 
    if(is_set_manually($key)){ 
     $someValue = TRUE; 
    } 
} 
+0

更正:最后一个键实际上变成了31.我再次检查。 – Parapluie

+0

你必须建立一些自定义逻辑来检查密钥的序列,如果序列被破坏,那么'/ *在这里添加代码* /' – MonkeyZeus

+0

这甚至意味着什么? _以不同于自动分配值的方式处理那些手动分配的值?_ – AbraCadaver

回答

0

不知道我是否正确地理解你的问题,但如果你要修复过程,如果它坏了,你可以做这样的事情:

<?php 
$addressData = array(
    'Full Name', 
    'Address Line 1', 
    'Address Line 2', 
    30 => 'City/Town', 
    22 => 'Province/State/Region', 
    27 => 'Postal/ZIP code', 
    'Country', 
); 
$result= []; 
$first = 0; 
foreach($addressData as $key=>$data){  
    if($key != $first && ($key > $first+1)){ 
     $newkey = $first; 
     $result[$newkey] = $data; 
    }else{ 
     $result[$key] = $data; 
    } 
    $first++; 
} 
print_r($result); 

和新阵列$result样子:

Array 
(
    [0] => Full Name 
    [1] => Address Line 1 
    [2] => Address Line 2 
    [3] => City/Town 
    [4] => Province/State/Region 
    [5] => Postal/ZIP code 
    [6] => Country 
) 
0

如果你可以指定数组像下面的格式可能是你的答案有帮助。

<?php 
$addressData = array(
    'Full Name', 
    'Address Line 1', 
    'Address Line 2', 
    array(30 => 'City/Town'), 
    array(22 => 'Province/State/Region'), 
    array(27 => 'Postal/ZIP code'), 
    'Country', 
); 

foreach($addressData as $key => $value){ 
    if(is_array($value)){ 
     echo 'Manually Key<br>'; 
    } else { 
     echo 'Dynamic Key<br>'; 
    } 
} 
?> 
+0

对。这或多或少是我想要避免的,以便通过多维数组来保存步行。有些人混淆了我的意思,所以我会用一些简单的代码来编辑,以帮助解释。 – Parapluie