我正在尝试递归地读取数组,直到我得到一个字符串。然后我尝试将其爆炸并返回新创建的数组。但是,由于某种原因,它没有分配数组:
function go_in($arr) { // $arr is a multi-dimensional array
if (is_array($arr))
foreach($arr as & $a)
$a = go_in($a);
else
return explode("\n", $arr);
}
编辑:
这是print_r打印的数组定义:
Array
(
[products] => Array
(
[name] => Arduino Nano Version 3.0 mit ATMEGA328P
[id] => 10005
)
[listings] => Array
(
[category] =>
[title] => This is the first line
This is the second line
[subtitle] => This is the first subtitle
This is the second subtitle
[price] => 24.95
[quantity] =>
[stock] =>
[shipping_method] => Slow and cheap
[condition] => New
[defects] =>
)
[table_count] => 2
[tables] => Array
(
[0] => products
[1] => listings
)
)
答案 0 :(得分:3)
我会用这个:
array_walk_recursive($array,function(&$value,$key){
$value = explode("\n",$value);
});
但是,这会修复您的功能:
function &go_in(&$arr) { // $arr is a multi-dimensional array
if (is_array($arr)){
foreach($arr as & $a) $a = go_in($a);
} else {
$arr = explode("\n", $arr);
}
return $arr;
}
答案 1 :(得分:0)
编写嵌套条件/循环时 - 总是添加大括号以提高可读性并防止错误。此外,您应该返回go_in
函数,因为它是递归的,需要传递给调用函数实例。
function go_in($arr) { // $arr is a multi-dimensional array
if (is_array($arr))
{
foreach($arr as &$a)
{
return go_in($a);
}
}
else
{
return ($arr);
}
}
答案 2 :(得分:0)
函数中未返回原始数组:
function go_in($arr) {
if (is_array($arr))
foreach($arr as &$a)
$a = go_in($a);
else
if (strpos($arr, "\n") !== false)
return explode("\n", $arr);
return $arr;
}
编辑:
现在,它只是真正编辑包含换行符的字符串。之前它会编辑每个字符串,这意味着每个字符串都作为数组返回。