Intereting Posts
Как контролировать активность пользователя на моем веб-сайте? encodeURIComponent действительно полезен? Проверка работоспособности процесса? Чтение в Malformed XML (некодированные объекты XML) с помощью PHP Валютный символ INR на pdf с использованием dompdf Какова наилучшая практика отправки писем из PHP-скрипта? PHP mail () не может отправлять внутренние адреса file_get_contents Добавление чисел из 2 текстовых файлов Как запустить только один процесс веб-загрузки в приложении Laravel? Как преобразовать неправильно кодированные данные в UTF-8? PHP Получить возвращаемое значение из конструктора Разрешить проверку только в том случае, если продукт обязательной категории находится в корзине Codeigniter 2.0 контроллер по умолчанию для подпапки не работает на сервере, но работает в localhost PHP – быстрый способ удалить все символы, не отображаемые в браузере из строки utf8 PHP Сортировка элементов XML по дате

Как извлечь данные из определенного массива PHP

У меня многомерный массив, который выглядит так: Базовый массив индексируется на основе идентификаторов категорий из моего каталога.

$cat[category_id] 

Каждый базовый массив имеет три основных элемента:

 ['parent_id'] ['sort_order'] ['name'] 

Я хочу создать функцию, которая позволяет нам создать список category_id и имен для данного parent_category_id в правильном порядке сортировки. Это возможно? Технически это одна и та же информация, но массив построен странным способом для извлечения этой информации.

Вот пример определения для массива:

 $cat = array(); $cat[32]['parent_id']= 0; $cat[32]['sort_order']= 1; $cat[32]['name']= 'my-category-name1'; $cat[45]['parent_id']= 0; $cat[45]['sort_order']= 0; $cat[45]['name']= 'my-category-name2'; $cat[2]['parent_id']= 0; $cat[2]['sort_order']= 2; $cat[2]['name'] = "my-category-name3"; $cat[3]['parent_id']= 2; $cat[3]['sort_order']= 1; $cat[3]['name'] = "my-category-name4"; $cat[6]['parent_id']= 2; $cat[6]['sort_order']= 0; $cat[6]['name'] = "my-category-name5"; 

Предполагая, что это что-то вроде этого:

 $ary = Array( 0 => Array( 'parent_category_id' => null, 'sort_order' => 0, 'name' => 'my-category-name0' ), 1 => Array( 'parent_category_id' => 0, 'sort_order' => 1, 'name' => 'my-category-name1' ), 2 => Array( 'parent_category_id' => 0, 'sort_order' => 2, 'name' => 'my-category-name2' ), 3 => Array( 'parent_category_id' => null, 'sort_order' => 0, 'name' => 'my-category-name3' ), 4 => Array( 'parent_category_id' => 3, 'sort_order' => 0, 'name' => 'my-category-name4' ) ); 

Вы можете использовать комбинацию foreach и usort для достижения того, что вы собираетесь делать .

 // @array: the array you're searchign through // @parent_id: the parent id you're filtering by function getFromParent($array, $parent_id){ $result = Array(); foreach ($array as $category_id => $entry){ if ($entry['parent_category_id']===$parent_id) $result[$category_id] = $entry; } usort($result,create_function('$a,$b','return ($a["sort_order"]>$b["sort_order"]?1:($b["sort_order"]<$a["sort_order"]?-1:0));')); return $result; } var_export(getFromParent($ary,0)); 

EDIT Извините, исправлены некоторые синтаксические ошибки. Протестировано и работает (по крайней мере, чтобы добиться того, что я намеревался)
EDITv2 Вот исходный результат из вышеизложенного:

 array ( 0 => array ( 'parent_category_id' => 0, 'sort_order' => 1, 'name' => 'my-category-name1', ), 1 => array ( 'parent_category_id' => 0, 'sort_order' => 2, 'name' => 'my-category-name2', ), ) 

(Используется var_export только для вас @FelixKling)

EDITv3 Я обновил свой ответ, чтобы продолжить обновление OP. Теперь я также сохраняю исходные значения «category_id» в массиве результатов.

Сначала вы создаете пустой массив, он будет использоваться для хранения вашего результата.

 $result = array(); 

Вам нужно выполнить итерацию через ваш начальный массив, вы можете использовать foreach() .

Затем, учитывая, что ваш parent_category_id просто использует оператор if чтобы проверить, является ли данный идентификатор или нет.

Если это так, просто создайте и подтолкните свой результат к вашему массиву $result .

Используйте любую из функций сортировки, которые вам нравятся

Используйте магический return $result;

Все готово.

 function returnSortedParents($categories, $target_parent){ $new_list = array(); foreach($categories as $index => $array){ //FIND ONLY THE ELEMENTS MATCHING THE TARGET PARENT ID if($array['parent_category_id']==$target_parent){ $new_list[$index = $array['sort_order']; } return asort($new_list); //SORT BASED ON THE VALUES, WHICH IS THE SORTING ORDER }