Задать вопрос

Как соединить массив по ключу?

Привет всем. Подскажите, пожалуйста.
Есть массив и в нём ещё 4 массива (мне так бд выдаёт).
В этих массивах:
[id] => 1  [year] => 2013 [name] =>  Александр
 [id] =>2 [year] => 2013 [name] =>  Сергей
 [id] => 3 [year] => 2012 [name] =>  Никита
 [id] => 4 [year] => 2012 [name] =>  Володя

Как мне объединить массивы по ключю year, чтобы получилось так:
[yaer] => 2013 [name1] => Александр [name2] => Сергей

И также с другим массивом.
  • Вопрос задан
  • 13472 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 2
Тех, кто говорит про получение данных на уровне БД, не слушайте. У вас получается динамическое число столбцов, а здесь без реального программирования БД не обойтись.

На самом деле, требуемая структура не является оптимальной. Во всяком случае пока нет доводов в ее пользу. Лучше на выходе получать что-то вроде того, что приведу ниже. Такие данные гораздо удобнее в дальнейшем обрабатывать.

$arr = array(array('id' => 1,  'year' => 2013, 'name' =>  "Александр"),
	array('id' =>2, 'year' => 2013, 'name' =>  "Сергей"),
	array('id' => 3, 'year' => 2012, 'name' =>  "Никита"),
	array('id' => 4, 'year' => 2012, 'name' =>  "Володя"));

function by_year($arr) {
	$result = array();
	foreach ($arr as $l) {
		$result[$l['year']][] = $l['name'];
	}
	return $result;
}

print_r(by_year($arr));

Результат:
Array
(
    [2013] => Array
        (
            [0] => Александр
            [1] => Сергей
        )

    [2012] => Array
        (
            [0] => Никита
            [1] => Володя
        )

)


Если нужно сохранять id пользователя, то ставьте его на место ключа ($result[$l['year']][$l['id']] = $l['name'];).

Проверки на NULL-значения и прочие вводите по необходимости, в зависимости от ограничений на таблицах БД.
Ответ написан
Комментировать
Если это разовая операция можно и как-то так
$arr = array(array('id' => 1,  'year' => 2013, 'name' =>  "Александр"),
 array('id' =>2, 'year' => 2013, 'name' =>  "Сергей"),
 array('id' => 3, 'year' => 2012, 'name' =>  "Никита"),
 array('id' => 4, 'year' => 2012, 'name' =>  "Володя"));

function group_by_year($arr) {
    $newarr = array();
    foreach($arr as $val) {
        if (isset($newarr[$val['year']])) {
            $index = 0;
            while (1) {
                if (!isset($newarr[$val['year']]['name'.$index]))
                    $newarr[$val['year']]['name'.$index] = $val['name'];
                    break;
                $index++;
            }
        }
        else {
            $newarr[$val['year']] = $val;
            unset($newarr[$val['year']]['year']);
        }
    }
    return $newarr;
}

print_r(group_by_year($arr));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Вам придется делать это либо руками, либо используя библиотеки наподобие https://github.com/Athari/YaLinqo
Ответ написан
Комментировать
Вообще то это на уровне бд нужно делать. Если Mysql то group by year
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы