我编写了一个代码来解析一些东西,从一个数组的数组键中动态制作一个数组。这是一个表单,所以奇数键有一个值,这就是问题所在。
我的代码:
//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(试图忽略它),但它会引发更多错误。
答案 0 :(得分:5)
问题不在于,2和12被视为关键,而是被视为真正的价值。如果您执行print_r($array)
,您会看到:
Array
(
[one_a] => 2
[0] => three_b
[1] => four_c
[five_d] => 12
)
(three_b
和four_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
)