Доброго времени суток уважаемые форумчане! В php имеется массив, состоящий из трёх элементов. Каждый элемент имеет структуру: name, company, position. Это (условный) список сотрудников, который содержит их имена, компанию в которой они работают и должность. Мне нужно вывести список и отсортировать его в зависимости от компании, грубо говоря, чтоб на экране было что-то похожее:
— ITStep
— Oksana
— Irina— Samsung
— OlesyaВот мой код:
PHP:
<?php $user = [[‘name’ => «Oksana», ‘company’ => «ITStep», ‘position’ => «Teacher»], [‘name’ => «Olesya», ‘company’ => «Samsung», ‘position’ => «Developer»], [‘name’ => «Irina», ‘company’ => «ITStep», ‘position’ => «Teacher»], ]; $htmlConclusion = ‘<h2 class=»»>’; foreach ($user as $key => $category) { foreach ($category as $name => $value) { $htmlConclusion .= ‘<h2>’ . $value . ‘</h2>’; } } ?>Помогите пожалуйста разобраться.
PHP:
Говорит — синтаксическая ошибка в строке 3. (тут она 3)
PHP:
$htmlConclusion =» ; foreach ($user as $value) { $htmlConclusion .= ‘<h2 class=»»>’. $value[‘company’] .‘ ‘.$value[‘name’].‘ ‘.$value[‘position’].‘</h2>’; } print($htmlConclusion);
Не, он тут получается не сортирует. Нужно чтоб Оксана с Ириной были в ITStep, а Олеся в Самсунге.
Сортировка – это одно, а показанный вывод – другое.
Сортировка:
PHP:
Для вывода отслеживайте изменение значения company в смежных «записях» после сортировки по company (при появлении нового значения выводите его).
Начнем с того, что в этом списке нет уникального ID сотрудника. Или вы его туда не включили.
Иначе, при группировке этого списка, часть сотрудников будет потеряна. Если они будут иметь одинаковые имена например.
Поэтому-то у вас с этим списком затруднения и возникли. Как только добавите ID, так сразу и разберетесь.
Ну, может и не сразу.
Это лабораторная, по условиям задачки нет id. В учебных целях, самое начало изучения php. Тут наверное предполагается что не будет одинаковых имен
За подсказку всё равно спасибо!
Тебе нужно сформировать другой массив на основе данного. Первым ключом у него будет company а вторым имя. В цикле перебирая первоначальный массив добавляем:
Код (Text):
$output = [ ‘Samsung’ => [] , ‘ITStep’ => [] ]; foreach($user as $value){ if ($value[‘company’] == ‘ITStep’) $output[‘ITStep’][] = $value; else $output[‘Samsung’][] = $value; } //а потом вывести массив $output foreach($output as $key ){ echo $key . ‘<br>’; foreach ($key as $value){ echo $value. ‘<br>’; } }
Во первых — автору нужна не сортировка, а группировка по компаниям и далее вывод.
Во вторыхобновись, динозавров не поддерживаю
Можешь считать такими ID индексы основного массива, если без них никак
— Добавлено —
Про ID я в общем-то согласен, причем не только сотрудника, но и компании, однако к делу это не относится, т.к. это учебная задачка, что ТС подтвердил.
— Добавлено —Автору нужна группировка при выводе, так что просто сортировать «записи» в качестве осн. действия более чем норм.
ты сам понял что написал ? Тебе сначала надо сгруппировать данные — это 1 действие, только после будешь выводить. Какая сортировка тут ? сортировка чего ? зачем ?
Странно, что ты не понял. Хотя нет, не странно
давай сюда код со своей сортировкой и выводом от А до Я. Я тебя разнесу сейчас.
См. выше. Вывод описан словами, если не понятно
— Добавлено —
Это обычная «группировка при выводе», так что было лень код писать. Пусть ТС хоть немного потрудится.
Я не вижу код твоего примера. Твоя сортировка убога — актуально.
Это лучше, чем ничего. Если ты не в курсе, «группировка при выводе» предполагает сортировку по полю, по которому выполняется группировка. Перенос значений в ключи не особо помогает, т.к. значения в общем случае могут быть в многобайтной кодировке, поэтому для сортировки все равно потребуется сравнение с учетом «локали». Так что твоя «сортировка» такая же убогая.
Я вижу ты долго думал и надумал бред астральной фантазии, вместо того чтобы реализовал «Теорема ясности и пи3дешь на практике».
Ячейки со значениями нужно сгруппировать по одному из выбранных значений, где после твоей убогой сортировки не нужно будет использовать отслеживания изменений company. В Группировке ты сделаешь это РАЗ, после перечислишь лишь имена через запятую и перейдешь в группу самсунга и т.д.
Следовательно, для её решения, их нужно сгенерировать. То ли используя ключи корня вашего многомерного массива, то ли составить уникальные значения из имеющихся(например имя-компания-должность).
То, что это лабораторная, не отменяет наработку навыков. Без использования уникальных ключей, такая лабораторная, скорее навредит учебного процессу. К тому же, наверняка, ваш преподаватель, где-то о таком её решении упоминал.
Вывод так не работает:
PHP:
<?php $user = [[‘name’ => «Oksana», ‘company’ => «ITStep», ‘position’ => «Teacher»], [‘name’ => «Olesya», ‘company’ => «Samsung», ‘position’ => «Developer»], [‘name’ => «Irina», ‘company’ => «ITStep», ‘position’ => «Teacher»], [‘name’ => «Igor», ‘company’ => «Samsung», ‘position’ => «Developer»], ]; $output = [ ‘Samsung’ => [] , ‘ITStep’ => [] ]; foreach($user as $value){ if ($value[‘company’] == ‘ITStep’) $output[‘ITStep’][] = $value; else $output[‘Samsung’][] = $value; } foreach($output as $key ){ $htmlConclusion .= ‘<h2>’ . $key . ‘</h2>’; foreach ($key as $value){ $htmlConclusion .= ‘<h2>’ . $value . ‘</h2>’; } } ?>На экране что-то вроде:
Array
Array
Array
Array
Array
Array