1

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

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
        )

)
4

3 回答 3

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;
}
于 2013-04-25T22:47:28.840 回答
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);
        }
}
于 2013-04-25T22:35:57.507 回答
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;
}

编辑:

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

于 2013-04-25T22:53:41.110 回答