📅  最后修改于: 2023-12-03 15:09:35.211000             🧑  作者: Mango
在 PHP 中,我们经常需要将多维数组转换为单数组,以方便后续的数据处理或输出。本文将介绍几种将多维数组转换为单数组的方法。
使用 array_walk_recursive() 函数,可以递归遍历多维数组,并对每个值执行一个自定义的函数,将所有值存入一个新的数组中。
function flattenArray($array) {
$result = array();
array_walk_recursive($array, function($value) use (&$result) {
$result[] = $value;
});
return $result;
}
使用示例:
$multiArray = array(
array(1, 2, 3),
array(4, 5, array(6, 7)),
8,
array(9, array(10, 11)),
);
$flatArray = flattenArray($multiArray);
print_r($flatArray);
输出结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
)
我们可以使用一个迭代器,将多维数组转换为单数组。具体实现方式是将多维数组中的每个元素存入迭代器中,递归遍历多维数组,并将所有元素遍历完后,将迭代器中的所有元素取出并存入一个新的数组中。
class FlattenIterator implements Iterator {
private $it;
private $stack = array();
public function __construct($array) {
$this->it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
}
public function current() {
return $this->it->current();
}
public function key() {
return $this->it->key();
}
public function next() {
$this->it->next();
if (! $this->it->valid() && count($this->stack) > 0) {
$this->it = array_pop($this->stack);
$this->it->next();
}
}
public function rewind() {
$this->it->rewind();
}
public function valid() {
if (! $this->it->valid()) {
if (count($this->stack) > 0) {
$this->it = array_pop($this->stack);
$this->it->next();
return $this->it->valid();
}
return false;
}
if ($this->it->hasChildren()) {
array_push($this->stack, $this->it);
$this->it = $this->it->getChildren();
}
return true;
}
}
function flattenArray($array) {
$result = array();
$it = new FlattenIterator($array);
foreach ($it as $value) {
$result[] = $value;
}
return $result;
}
使用示例:
$multiArray = array(
array(1, 2, 3),
array(4, 5, array(6, 7)),
8,
array(9, array(10, 11)),
);
$flatArray = flattenArray($multiArray);
print_r($flatArray);
输出结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
)
我们也可以使用递归函数来将多维数组转换为单数组。递归函数会递归遍历多维数组,并将所有元素存入一个新的数组中。
function flattenArray($array) {
$result = array();
foreach ($array as $value) {
if (is_array($value)) {
$result = array_merge($result, flattenArray($value));
}
else {
$result[] = $value;
}
}
return $result;
}
使用示例:
$multiArray = array(
array(1, 2, 3),
array(4, 5, array(6, 7)),
8,
array(9, array(10, 11)),
);
$flatArray = flattenArray($multiArray);
print_r($flatArray);
输出结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
)
以上是将多维数组转换为单数组的三种常用方法。根据数据格式的不同,可能需要选择不同的方法。