Я пытаюсь объединить подмассивы многомерного массива на основе значения hash
.
Мой ввод выглядит так:
$images_arr = [
[
'hash' => '948e980ed2a36d917f1b3026b04e0016',
'filename' => ['73315_73316_73317_LAKE13437_322.tif'],
'filepath' => ['_TEST_DATA']
// and there is more data here
],
[
'hash' => '948e980ed2a36d917f1b3026b04e0016',
'filename' => ['73315_73316_73317_LAKE13437_322(1).tif'],
'filepath' => ['_TEST_DATA/subdirectory']
// and there is more data here
]
];
При совпадении одного или нескольких значений hash
я хочу объединить массивы и объединить значения подмассива filename
и значения подмассива filepath
в первое.
Примерно так:
array (
0 =>
array (
'hash' => '948e980ed2a36d917f1b3026b04e0016',
'filename' =>
array (
0 => '73315_73316_73317_LAKE13437_322.tif',
1 => '73315_73316_73317_LAKE13437_322(1).tif',
),
'filepath' =>
array (
0 => '_TEST_DATA',
1 => '_TEST_DATA/subdirectory',
),
// more data here
),
)
Массив будет содержать тысячи записей, и мне нужно иметь возможность комбинировать несколько массивов, где совпадают только значения hash
.
До сих пор я пытался использовать foreach в массиве, чтобы создать переменную для кэширования значения хэша и проверки следующих циклов. Тогда я могу извлечь filename
или filepath
, где это так. Не уверен, что этот метод самый искусный - извиняюсь, я все еще новичок в php.
Моя попытка кодирования:
$cache_hash = null;
foreach ($images_arr as $image) {
$this_hash = $image['hash'];
if ($cache_hash != $this_hash) {
$cache_hash = $this_hash;
} else {
foreach ($image['filename'] as $filename) {
//Get filename
}
}
}