PHP:无法预测简单的关联数组

时间:2010-10-17 22:28:28

标签: php foreach associative-array

我编写了一个代码来解析一些东西,从一个数组的数组键中动态制作一个数组。这是一个表单,所以奇数键有一个值,这就是问题所在。

我的代码:

//array values are not needed in my code, just junk rather
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

foreach($array as $element) {
    $parts = explode("_", $element);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

我不知道这可能会出错,但是当foreach()遍历关联数组时,它会将“2”和“12”作为单独的数组键读取!这会破坏我的$explode代码并抛出错误,因为“2”中没有_

为什么关联数组会像这样失败?我尝试明确定义as $element => $value,不使用$ value(试图忽略它),但它会引发更多错误。

1 个答案:

答案 0 :(得分:5)

问题不在于,2和12被视为关键,而是被视为真正的价值。如果您执行print_r($array),您会看到:

Array
(
    [one_a] => 2
    [0] => three_b
    [1] => four_c
    [five_d] => 12
)

three_bfour_c被分配了一个自动增量数组密钥)所以你必须考虑到密钥可能是数字:

<?php
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

// get the key separate from the element:
foreach($array as $key => $element) {
    // and now check for the key
    if (is_numeric($key))
        $value = $element;
    else
        $value = $key;

    $parts = explode("_", $value);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

这会让你

Array
(
    [0] => one
    [1] => three
    [2] => four
    [3] => five
)