处理数组PHP

时间:2017-03-05 19:23:50

标签: php arrays array-flip

我正在尝试排序以下数组。

阵列(S)

$fruits = array(
    'mango',
    'mango red',
    'mango yellow',
    'orange',
    'banana',
    'apple',
    'apple red',
    'apple green',
);

我做了什么:

$data = array_flip( $fruits ); // flip array
$data = array_fill_keys( array_keys( array_flip( $data ) ), 'array(),' ); // fill array value: "array(),"

print_r( $data );

我想要这个结果:

$fruits = array(
    'mango'      => array(
        'red'       => array(),
        'yellow'    => array(),
    ),
    'orange'    => array(),
    'banana'    => array(),
    'apple'     => array(
        'red'       => array(),
        'green'     => array(),
    ),
);

有人知道怎么做吗?

希望你能理解这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

循环遍历数组,并拆分字符串。然后递归创建嵌套数组。

$result = array();
foreach ($fruits as $f) {
    $f_array = explode(' ', $f);
    $start = &$result;
    foreach ($f_array as $word) {
        if (!isset($start[$word])) {
            $start[$word] = array();
        }
        $start = &$start[$word];
    }
}
var_dump($result);

DEMO

答案 1 :(得分:1)

使用以下方法(对于您当前的数组):

$result = [];
foreach ($fruits as $fruit) {
    $parts = explode(' ', $fruit);
    if (count($parts) == 1) {
        $result[$fruit] = [];
    } elseif (isset($result[$parts[0]])) {
        $result[$parts[0]][$parts[1]] = [];
    }
}

print_r($result);