📜  将多维数组转换为单数组php(1)

📅  最后修改于: 2023-12-03 15:09:35.211000             🧑  作者: Mango

将多维数组转换为单数组

在 PHP 中,我们经常需要将多维数组转换为单数组,以方便后续的数据处理或输出。本文将介绍几种将多维数组转换为单数组的方法。

方法一:使用 array_walk_recursive() 函数

使用 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
)

以上是将多维数组转换为单数组的三种常用方法。根据数据格式的不同,可能需要选择不同的方法。