2010-10-17 89 views
2

我写了一个代码来解析通过某些东西,动态地从一个数组的数组键。这是来自一个表单,所以奇数键有价值,这就是问题。PHP:不能foreach简单关联数组

我的代码:

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

回答

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 
) 
+0

啊,这真的很奇怪,我曾与PHP工作了一段时间,但从来没有遇到过这样的事情。我会寻求一种不同的方法来解析像这样的表单元素。我可以接受。 – John 2010-10-17 22:41:17