PHP array_walk无法正常工作

时间:2013-12-11 05:26:12

标签: php arrays

我已经阅读了很多与array_walk相关的帖子,但我无法完全理解为什么我的代码不起作用。这是我的例子。

我执行$new_arrayvar_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);

2 个答案:

答案 0 :(得分:1)

这样做。

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

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

}

答案 1 :(得分: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]);

- 甚至:

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