2010-10-17 82 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