I wrote a code to parse through something, dynamically making an array out of the array keys of one array. This is from开发者_如何转开发 a form, so the odd key has a value, and that is somehow the problem.
My code:
//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);
I do not get how this could go wrong, but when the foreach()
iterates through the associative array, it reads "2" and "12" as separate array keys! This ruins my $explode
code and throws an error, as "2" has no _
in it.
Why does the associative array fail like this? I tried explicitly defining as $element => $value
, NOT using $value (to try to ignore it), but it throws even more errors.
The problem is not, that 2 and 12 are seen as keys, but rather that they are seen as the real values. If you do a print_r($array)
, you will see:
Array
(
[one_a] => 2
[0] => three_b
[1] => four_c
[five_d] => 12
)
(three_b
and four_c
get assigned an automatic incremental array key) So you have to take into account, that the key might by numeric:
<?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);
This will get you
Array
(
[0] => one
[1] => three
[2] => four
[3] => five
)
精彩评论