我被困在可能非常简单的事情上。
我通过使用递归函数循环现有数组来创建一个新数组,但我似乎无法将值保持到新数组。最后,这个功能会有点复杂,但是现在我需要一些帮助。
我已经尝试了很多方法来实现这个目标,但我现在感到很茫然。
这是我的PHP功能
function recursive($array) {
$newArray = array();
foreach($array as $key => $value) {
if(is_array($value)){
recursive($value);
}else{
$newArray[] = $value;
}
}
return $newArray;
}
原样,新阵列永远不会被填满...但是,如果我改变这条线......
recursive($value); // Why can't I just call the recursive function here?
...至...
$newArray[] = recursive($value); // Instead of having to set a new value to the new array?
一切正常......除了我的目标是创建一个只有值的平面数组。
所以我的问题是,为什么有必要设置一个新的数组值才能再次调用递归函数?理想情况下,如果值是一个数组,我想跳过设置一个新的数组值,并继续循环通过原始数组。
使用array_merge
:
function recursive($array) {
$newArray = array();
foreach($array as $key => $value) {
if(is_array($value)){
$newArray = array_merge($newArray, recursive($value));
}else{
$newArray[] = $value;
}
}
return $newArray;
}
...或者你可以使用special operator:
function recursive($array) {
$newArray = array();
foreach($array as $key => $value) {
if(is_array($value)){
$newArray += recursive($value);
}else{
$newArray[] = $value;
}
}
return $newArray;
}
...或者通过像这样的variable by reference:
function recursive($array, &$newArray = null) {
if (!$newArray) {
$newArray = array();
}
foreach($array as $key => $value) {
if(is_array($value)){
recursive($value, $newArray);
}else{
$newArray[] = $value;
}
}
return $newArray;
}
使用array_merge()合并从recursive($value);
和$ newArray返回的数组
$newArray = array_merge($newArray,recursive($value));
你可以保证$newArray
在此之后会变平,因为之前$newArray
的值是平的,而recursive
总是返回一个平面阵列,因此两者的组合应该是一个平面阵列。
你没有对递归函数的返回做任何事情。试试这个:
function recursive($array) {
$newArray = array();
foreach($array as $key => $value) {
if(is_array($value)){
// This is what was modified
$newArray = array_merge($newArray, recursive($value));
}else{
$newArray[] = $value;
}
}
return $newArray;
}