1

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

数组

$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(),
    ),
);

有人知道怎么做这个吗?

希望你能理解这个问题。先感谢您。

4

2 回答 2

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);

演示

于 2017-03-05T19:29:40.683 回答
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);
于 2017-03-05T19:31:34.413 回答