【问题标题】:PHP: cannot foreach simple associatie arrayPHP:不能foreach简单的关联数组
【发布时间】:2011-04-26 17:09:29
【问题描述】:

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

我的代码:

//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(试图忽略它),但它会引发更多错误。

【问题讨论】:

    标签: php foreach associative-array


    【解决方案1】:

    问题不在于 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
    )
    

    【讨论】:

    • 啊,这真的很奇怪,我使用 PHP 有一段时间了,但以前从未遇到过这样的事情。我将寻求一种不同的方法来解析这样的表单元素。尽可能接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多