Добрый день. Подскажите пожалуйста как можно более изящно (при этом не снижая производительность) сделать следующее.
У нас есть некий массив
$a = [
1 => [
3 => [
"logo" => "logo_3_1",
"cover" => "cover_3_1"
],
4 => [
"logo" => "logo_4_1",
]
],
2 => [
5 => [
"logo" => "logo_5_2",
"cover" => "cover_5_2"
]
]
];
В нем хранятся определенные сущности, у которых есть идентификаторы (logo_3_1, cover_3_1 и т.д).
Задача.
Нужно пройтись по этому массиву и выбрать эти идентификаторы. Потому на основании их будет сделана выборка и мы получим пути к изображениям.
Сейчас это реализована через foreach вложенный в foreach и т.д. Что для выборки идентификаторов что для замены их на пути.
Попробовал использовать итераторы
$r = [];
$ai = new RecursiveArrayIterator($a);
$ari = new RecursiveIteratorIterator($ai);
foreach ($ari as $key => $value) {
array_push($r, $value);
}
В результате в $r у нас есть все идентификаторы.
А вот тоже самое провернуть с обновлением исходного массива не получается. Т.е так же самая конструкция не позволяет нам обновить значение.
function simpleIterator($iterator, $result)
{
while ($iterator->valid()) {
if ($iterator->hasChildren()) {
simpleIterator($iterator->getChildren(), $result);
}
else {
if ($result[$iterator->current()]) {
$iterator->offsetSet($iterator->key(), $result[$iterator->current()]);
};
}
$iterator->next();
}
};
iterator_apply($ai, 'simpleIterator', [$ai, $images]);
Подскажите пожалуйста, что я делаю не так, возможно выбранный подход тупиковый.