区分动态和手动分配的数组键

时间:2017-02-13 18:15:34

标签: php arrays key

我一直在寻找缩短代码的方法,但找不到这个问题的答案。

在此示例数组中:

$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;
    }
}

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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>';
    }
}
?>