У меня есть заданный многомерный массив, например:
$givenArray = [
'one__111__' => [ 'more' => '000'],
'one__111__xyz' => [ 'more' => '000'],
'hey__121__' => [ 'more' => '000'],
'hey__121__abc' => [ 'more' => '000'],
'zzz__212__' => [ 'more' => '000'],
'zzz__212__b' => [ 'more' => '000'],
'abc__3__' => [ 'more' => '000'],
];
Мне нужно сопоставить пары, если они начинаются с одинакового имени ключа. Так что one__111__
и one__111__xyz
- это пара.
Результат должен выглядеть следующим образом:
[
['one__111__'] => [
[0] => ['one__111__' => ['more' => '000']],
[1] => ['one__111__xyz' => ['more' => '000']]
],
['hey__121__'] =>
[0] => ['hey__121__' => ['more' => '000']],
[1] => ['hey__121__abc' => ['more' => '000']]
]
['zzz__212__'] =>
[0] => ['zzz__212__' => ['more' => '000']],
[1] => ['zzz__212__b' => ['more' => '000']]
]
['abc__3__'] =>
[0] => ['abc__3__' => ['more' => '000']]
]
]
Это то, что я пробовал. Я считаю, что это O (n2)
$result = [];
foreach($givenArray as $key => $value) {
foreach($result as $resultItemKey => $resultItemValue) {
if(substr($key, 0, strlen($resultItemKey)) === $resultItemKey) {
$result[$resultItemKey][] = [$key => $value];
continue 2;
}
}
$result[$key][] = [$key => $value];
}
Я искал функции фильтра / уменьшения / отображения массива, но не смог найти "правильную". Какую функцию массива следует использовать? Как я предполагаю, мне нужна функция массива, которая перебирает каждый элемент и позволяет мне передать вновь созданный массив. Есть ли такая функция в PHP?
PHP коде песочницы для игры с