Некоторое время застрял на этом, так что любая помощь была бы оценена. У меня есть один массив (слева), который содержит список элементов, цель состоит в сортировке других массивов (справа) со значениями из левого массива.
Левый массив
Array ( [0] => ID [1] => FirstName [2] => LastName [3] => Address )
Правильный массив
Array ( [0] => Array ( [FirstName] => Pim [Address] => Finland [LastName] => Svensson [ID] => 3 ) [1] => Array ( [FirstName] => Emil [Address] => Sweden [LastName] => Malm [ID] => 5 ) )
То, что я пытаюсь выполнить, будет похоже на это
Array ( [0] => Array ( [ID] => 3 [FirstName] => Pim [LastName] => Svensson [Address] => Finland )
Кто угодно? 🙂 О, я запускаю php 5.3, если это помогает!
$output = array(); foreach ( $right as $array ) { foreach ( $left as $field ) { $temp[$field] = $array[$field]; } $output[] = $temp; }
Вы можете использовать uksort()
который позволяет сортировать ключи массива с помощью определенной пользователем функции. Например:
function sort_by_array($array) { // create a sorting function based on the order of the elements in the array $sorter = function($a, $b) use ($array) { // if key is not found in array that specifies the order, it is always smaller if(!isset($array[$a])) return -1; if($array[$a] > $array[$b]) { return 1; } return ($array[$a] == $array[$b]) ? 0 : -1; }; return $sorter; } // $array contains the records to sort // $sort_array is the array that specifies the order foreach($array as &$record) { uksort($record, sort_by_array(array_flip($sort_array))); }
Я использую возможность в 5.3 для определения функций динамически, и я использую array_flip()
для преобразования:
Array ( [0] => ID [1] => FirstName [2] => LastName [3] => Address )
в
Array ( [ID] => 0 [FirstName] => 1 [LastName] => 2 [Address] => 3 )
Это облегчает сравнение ключей позже.
Вы должны взорвать массив. Храните массив в переменной, подобной этому.
$array = Array ( [0] => Array ( [ID] => 3 [FirstName] => Pim [LastName] => Svensson [Address] => Finland );
а затем взорвать массив после взрыва массива, вы получите параметры выделенного массива, тогда вы можете использовать функцию развязки, упорядочить их в любом порядке, как вы пожелаете
Я бы сделал шаг назад и посмотрел, что вам действительно нужно делать. Массив ассоциативный, поэтому вы можете мгновенно получить доступ к правильному элементу, не так ли? Поэтому вам не нужно, чтобы он был в порядке, если вы не печатаете вывод с помощью foreach
.
Я бы предложил одно из следующих решений:
Ну, ваш вопрос необычен, обычно ассоциативные массивы используются для решения любых проблем, связанных с «позицией». Во всяком случае, есть много способов сделать то, что вы ищете, что вы ищете.
Вы можете использовать list (), но это позиция:
foreach($oldArray as $o) { list($firstName,$lastName,$address,$id)=$oldArray; $newArray[]=array($id,$firstName,$lastName,$address); }
Но лучший способ решить вашу проблему – заполнить массив прямо в правильном порядке вместо повторного сортировки после: