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

Joh*_*ohn 2 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);
Run Code Online (Sandbox Code Playgroud)

我不明白这可能会出错,但是当foreach()迭代通过关联数组时,它会将"2"和"12"作为单独的数组键读取!这会破坏我的$explode代码并抛出错误,因为"2"中没有错误_.

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

Dan*_*oap 5

问题不在于,2和12被视为关键,而是它们被视为真正的价值.如果你这样做print_r($array),你会看到:

Array
(
    [one_a] => 2
    [0] => three_b
    [1] => four_c
    [five_d] => 12
)
Run Code Online (Sandbox Code Playgroud)

(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);
Run Code Online (Sandbox Code Playgroud)

这会得到你

Array
(
    [0] => one
    [1] => three
    [2] => four
    [3] => five
)
Run Code Online (Sandbox Code Playgroud)