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

Привет всем. Подскажите, пожалуйста.
Есть массив и в нём ещё 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] => Сергей

И также с другим массивом.
  • Вопрос задан
  • 13467 просмотров
Решения вопроса 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы