减少多维数组

时间:2016-06-27 05:33:10

标签: php arrays multidimensional-array

我有一个带有一定数量维度的数组,所以我不是真的在看递归的东西(除非为了将来的可维护性)。它是从数据库获取的数字数组,每行包含另一个数组。这些2级数组中的每一个都包含类似

的字符串

var1, var2 , var3

等等。请注意字符串中逗号的不规则外观。所以我打算在第三级打破逗号分隔的字符串然后将它们记录在最后的数组中,但是我得到一个错误,说我正在提供一个空数组。所以我想知道它为什么说数组为空以及如何让它识别为有效数组。我的代码如下:

function fetch_each($arr) {
$temp = array();

for ($i = 0; $i < count($arr); $i++) {
for ($j = 0; $j < count($arr[$i]); $j++) {
array_reduce(preg_split("/[\s,]+/", $arr[$i][$j]), function($a, $b) {
return array_push($temp, $a, $b);
});
}
}
return $temp;
}

PS:请不要标记为重复。我不想复制别人的代码但想要理解为什么这不起作用。感谢。

1 个答案:

答案 0 :(得分:1)

您遇到此问题,因为在功能块中看不到$temp。 要解决此问题,您必须在函数定义旁边使用关键字 use(variable_name),如下例所示:

array_reduce(preg_split("/[\s,]+/", $arr[$i][$j]), function($a, $b) use (&$temp) {
        return array_push($temp, $a, $b);
});

只需注释,$a将包含array_push的结果

  

返回:int数组中新元素的数量。

所以你可以从array_push()指令中删除它以保持一个只有拆分字符串的干净数组