2013-12-11 58 views
1

我讀過很多與array_walk相關的帖子,但我無法完全理解爲什麼我的代碼無法正常工作。這是我的例子。PHP array_walk無法正常工作

$new_array是空的,當我做了var_dump,如果我在每個迭代上寫var_dump它顯示了一定的價值,這意味着被治療$new_array如在每個迭代上一個新的變量,我不知道這是爲什麼..有誰知道這段代碼中發生了什麼錯誤?

$exploded = explode(",", $moveArray[0]); 

print_r($exploded); 

$new_array = array(); 
array_walk($exploded,'walk', $new_array); 

function walk($val, $key, &$new_array){ 
    $att = explode('=',$val); 
    $new_array[$att[0]] = $att[1]; 

} 

var_dump($new_array); 
+0

一個側面說明,您可以使用[匿名函數與'使用() '語言結構](http://www.php.net/manual/en/functions.anonymous.php)如果你使用PHP> = 5.3 – Passerby

+0

我試過了,它沒有工作 –

+0

它應該與'use'一起工作: http://3v4l.org/kRYD7 – Passerby

回答

1

查看你的代碼我發現你的問題是解析類似於:a=b,c=d,e=f。實際上,由於您的問題是關於使用array_walk(),有正確用法:

$string = 'foo=bar,baz=bee,feo=fee'; 

$result = []; 
array_walk(explode(',', $string), function($chunk) use (&$result) 
{ 
    $chunk = explode('=', $chunk); 
    $result[$chunk[0]]=$chunk[1]; 
}); 

-i.e.使用anonymous function,通過引用接受它來影響上下文變量$result

但你的情況,特別是,即使不需要array_walk()

$string = 'foo=bar,baz=bee,feo=fee'; 

preg_match_all('/(.*?)\=(.*?)(,|$)/', $string, $matches); 
$result = array_combine($matches[1], $matches[2]); 

-or連:

//will not work properly if values/names contain '&' 
$string = 'foo=bar,baz=bee,feo=fee'; 
parse_str(str_replace(',', '&', $string), $result); 
1

這樣做。

$new_array = array(); 
array_walk($exploded,'walk'); 

function walk($val, $key){ 
    global $new_array; 
    $att = explode('=',$val); 
    $new_array[$att[0]] = $att[1]; 

} 
+0

'global'?你在開玩笑? –

+0

我沒有發現任何錯誤..或請解釋.. – zzlalani