📜  php flatten array - PHP (1)

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

PHP数组扁平化

在PHP中,有时候我们需要处理多维数组,但是在实际使用中,很多时候我们只需要处理一维数组。这时候就需要对多维数组进行扁平化处理。本文将介绍如何在PHP中对多维数组进行扁平化处理。

什么是扁平化?

扁平化就是将多维数组中的所有元素提取出来,变成一维数组。

例如,对于下面的多维数组:

$array = array(
    'a' => array(
        'b' => array(
            'c' => 'foo'
        )
    ),
    'd' => 'bar'
);

扁平化后的结果应该是:

$flattenedArray = array(
    'a.b.c' => 'foo',
    'd' => 'bar'
);
实现方法

PHP中有多种方式实现数组的扁平化,下面介绍两种常用的方式。

方法一:递归实现

实现过程:

  1. 用foreach循环遍历数组中的每一个元素;
  2. 判断该元素是否为数组,如果是数组,则对该元素再次递归执行该方法,否则将该元素加入结果数组中。
function flattenArray($array, $prefix = '') {
    $result = array();
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $result = array_merge($result, flattenArray($value, $prefix . $key . '.'));
        } else {
            $result[$prefix . $key] = $value;
        }
    }
    return $result;
}

调用该方法即可得到扁平化后的数组。

$flattenedArray = flattenArray($array);
print_r($flattenedArray);

输出结果如下:

Array
(
    [a.b.c] => foo
    [d] => bar
)
方法二:迭代实现

实现过程:

  1. 实例化一个队列,将所有数组元素入队;
  2. 利用while循环,从队列中取出元素,如果是数组,则将数组中所有元素入队,否则将该元素加入结果数组中。
function flattenArray($array) {
    $result = array();
    $queue = new SplQueue();
    $queue->enqueue(array('data' => $array, 'prefix' => ''));
    while(!$queue->isEmpty()) {
        $next = $queue->dequeue();
        $data = $next['data'];
        $prefix = $next['prefix'];
        foreach($data as $key => $value) {
            $newKey = $prefix . $key;
            if(is_array($value)) {
                $queue->enqueue(array('data' => $value, 'prefix' => $newKey . '.'));
            } else {
                $result[$newKey] = $value;
            }
        }
    }
    return $result;
}

调用该方法即可得到扁平化后的数组。

$flattenedArray = flattenArray($array);
print_r($flattenedArray);

输出结果如下:

Array
(
    [a.b.c] => foo
    [d] => bar
)
总结

本文介绍了PHP数组扁平化的实现方法,包括递归和迭代两种方式。这两种方法都可以实现数组扁平化,读者可以根据自己的喜好选择其中一种进行使用。