Работа с массивом переполнения стека

я пытаюсь Сортировать следующие массивы.

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

Кто-нибудь знает, как это сделать?

Надеюсь, вы понимаете вопрос. Заранее спасибо.

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

Другие решения

Используйте следующий подход (для вашего текущего массива):

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

По вопросам рекламы [email protected]