Приветствую! Суть: Необходимо отсортировать двумерный массив по шаблону, в качестве которого выступает другой массив. Размеры массивов в 99.99% всегда разные. В примере ниже, нужно отсортировать по колонке 'status' так, чтобы их значения соответствовали порядку значений в массиве-шаблоне: PHP: <?php // Входящие данные. $data = [ ['id' => 10, 'status' => 3,], ['id' => 20, 'status' => 4,], ['id' => 30, 'status' => 4,], ['id' => 40, 'status' => 2,] ]; // Шаблон для сортировки $template = [4, 2, 1, 5, 3, 0]; // Желаемый результат $data = [ ['id' => 20, 'status' => 4,], ['id' => 30, 'status' => 4,], ['id' => 40, 'status' => 2,], ['id' => 10, 'status' => 3,] ]; На текущий момент решил эту задачу следующим образом: PHP: <?php $template = array_combine($template, array_fill(0, count($template), [])); foreach($data as $v) { $template[$v['status']][] = $v; } $data = call_user_func_array('array_merge', array_filter($template)); Залипающие глаза и сонный мозг не дают покоя, что это можно сделать гораздо проще, с меньшими телодвижениями, но с какой тут еще стороны можно подойти - сообразить не могу. Подкиньте идейку, плиззз.
PHP: uasort($data, function($a, $b) use($template){ return array_search($a['status'], $template) <=> array_search($b['status'], $template); });
Не самый свежий. Попробуй array_flip($template) и по индексу вместо array_search. Добавь проверок. Я прост в последние 5 минут рабочего времени запилил, а ща вот подумал.
не важно. Можно было даже просто сказать, мол: "Чувак, вспомни про индексы" и мне бы этого было достаточно. После бессонной ночи заклинило меня в другую степь, а слово "индексы" - протрезвило
Подскажите пожалуйста на php 7.2 какой самый простой метод сортировки по шаблону на данный момент? Статьи все старые, кажется там все мудрено. Например есть такой шаблон: PHP: $template = [ '45395044-B009-44E6-9A2C-F5B5378EC9F1', '44422D54-18F6-4BD0-A860-E973AFB1DFA6', '9ECB9FD0-9FE4-4C93-ACA3-068992CEDB78', '2DE5F53E-7A2F-479D-9525-9B293753E3B8', '0188F2BD-950D-443D-BCB1-9D80F74E67BF', '114789C8-6524-4C4E-9E63-B08A378353F8', '0C08CE22-5E25-46AB-9062-464492B33C7B', '25F89090-C8DA-4981-AE66-5118FEF8A297', '396F0971-01C1-45EE-8B29-B43ABA539EF7' ]; и результат запроса (в запросе нет возможности отсортировать) : PHP: operationId | stepOperationId 45395044-B009-44E6-9A2C-F5B5378EC9F1 | BD4FAC73-98C1-4AB1-9722-DA77EBC1C618 45395044-B009-44E6-9A2C-F5B5378EC9F1 | B5284E7B-9ED4-4347-BF7B-7E86842911B0 45395044-B009-44E6-9A2C-F5B5378EC9F1 | 7BD446E3-E60B-49B6-8C0E-557D20B573AC 45395044-B009-44E6-9A2C-F5B5378EC9F1 | 4B2CFC51-388E-4DF7-8051-B694C89ECD49 45395044-B009-44E6-9A2C-F5B5378EC9F1 | 17DC6CB1-CA86-461A-AA4B-CD9AE5F51FE7 114789C8-6524-4C4E-9E63-B08A378353F8 | BD4FAC73-98C1-4AB1-9722-DA77EBC1C618 114789C8-6524-4C4E-9E63-B08A378353F8 | 4B2CFC51-388E-4DF7-8051-B694C89ECD49 114789C8-6524-4C4E-9E63-B08A378353F8 | 17DC6CB1-CA86-461A-AA4B-CD9AE5F51FE7 0188F2BD-950D-443D-BCB1-9D80F74E67BF | 7BD446E3-E60B-49B6-8C0E-557D20B573AC 0188F2BD-950D-443D-BCB1-9D80F74E67BF | 17DC6CB1-CA86-461A-AA4B-CD9AE5F51FE7 0188F2BD-950D-443D-BCB1-9D80F74E67BF | 9AB2C898-993B-4C6A-8B83-8CFAE5674B6F 0188F2BD-950D-443D-BCB1-9D80F74E67BF | 68040243-92D7-46C1-A356-18509C7CEB17 надо отсортировать колонку operationId по шалбону $template. Пока ищу возможные простые варианты, может кто знает как проще всего?
у меня получилась такая фигня: PHP: $form // результат запроса $template = [ '45395044-B009-44E6-9A2C-F5B5378EC9F1', '44422D54-18F6-4BD0-A860-E973AFB1DFA6', '9ECB9FD0-9FE4-4C93-ACA3-068992CEDB78', '2DE5F53E-7A2F-479D-9525-9B293753E3B8', '0188F2BD-950D-443D-BCB1-9D80F74E67BF', '114789C8-6524-4C4E-9E63-B08A378353F8', '0C08CE22-5E25-46AB-9062-464492B33C7B', '25F89090-C8DA-4981-AE66-5118FEF8A297', '396F0971-01C1-45EE-8B29-B43ABA539EF7' ]; $result = []; foreach($template as $value){ $array = array_keys(array_column($form, 'operationId'), $value); if(count($array) !== 0){ foreach ($array as $int){ $result[] = $form[$int]; } } } return $result; как то не очень.