Как объединить вложенные массивы на основе ключей?

69
5

PHP array

У меня есть массив, как показано на рисунке выше, я пытаюсь объединить все вложенные массивы на основе ключей, поэтому, например, сейчас есть 5 массивов с ключом 34. Я хочу один массив с 34 ключом и 5 значениями. Как я могу этого достичь? Вот мой код

    $proba = array();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
extract($row);
if(!in_array($id, array_column($posts_arr['lokacije'], 'id'))) {
$post_item = array(
'id' => $id,
'name' => $name,
'state' => $state,
'address' => $address,
'phone' => $phone,
'working_hours' => $working_hours,
'description' => $description,
'email' => $email,
'fb_page' => $fb_page,
'website' => $website,
'additional_info' => $additional_info,
'lat' => $lat,
'lng' => $lng
);
array_push($posts_arr['lokacije'], $post_item);
};

array_push($proba, array($id => $naziv));
$test = array_merge_recursive($proba, array($id => $naziv));
}
print_r($test);

спросил(а) 2019-04-07T00:27:00+03:00 8 месяцев назад
3
Решение
48

Я создал демо, как и у вас, вот код:

$arr = [
[2 => 'A'],
[34 => 'B'],
[34 => 'C'],
[34 => 'D'],
[34 => 'E'],
[34 => 'F'],
[20 => 'G'],
];

$result = [];

foreach($arr as $a) {
foreach($a as $key => $value) {
array_key_exists($key, $result) ?
$result[$key][] = $value:
$result[$key] = [$value];
}
}

Результат:

array(3) {
[2]=>
array(1) {
[0]=>
string(1) "A"
}
[34]=>
array(5) {
[0]=>
string(1) "B"
[1]=>
string(1) "C"
[2]=>
string(1) "D"
[3]=>
string(1) "E"
[4]=>
string(1) "F"
}
[20]=>
array(1) {
[0]=>
string(1) "G"
}
}

ответил(а) 2019-04-07T00:39:00+03:00 8 месяцев назад
Еще 2 ответа
45

$proba = array();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
extract($row);

//....

if (empty($proba[$id])) {
$proba[$id] = array();
}
$proba[$id][] = $naziv;
}

Также я не понимаю, почему вы используете extract - полагаю, $post_item - это то же самое, что и $row.

ответил(а) 2019-04-07T00:31:00+03:00 8 месяцев назад
33

Простой ответ на то, что я понимаю, вы пытаетесь сделать:

foreach($input as $nr=>$data) {
foreach($data as $key=>$val) {
$output[$key][$nr] = $val;
}
}

Это просто перевернет уровни иерархии. Если вы просто хотите собрать значения, это один из способов сделать это. Он сохраняет исходные индексы массива, но вместо "[$ nr]" вы можете просто сказать "[]", чтобы сделать его простым последовательным массивом.

Если вы представите свой массив в виде текста вместо этого большого изображения, я покажу вам результаты.

ответил(а) 2019-04-07T00:31:00+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема