PHP foreach分配数组

时间:2013-04-25 22:34:18

标签: php arrays recursion

我正在尝试递归地读取数组,直到我得到一个字符串。然后我尝试将其爆炸并返回新创建的数组。但是,由于某种原因,它没有分配数组:

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
        )

)

3 个答案:

答案 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;
}

编辑:

现在,它只是真正编辑包含换行符的字符串。之前它会编辑每个字符串,这意味着每个字符串都作为数组返回。