Изменить порядок индексов в массиве

Некоторое время застрял на этом, так что любая помощь была бы оценена. У меня есть один массив (слева), который содержит список элементов, цель состоит в сортировке других массивов (справа) со значениями из левого массива.

Левый массив

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 .

Я бы предложил одно из следующих решений:

  1. Если вам нужен «правильный» массив, чтобы быть в ключевом порядке, посмотрите на запрос базы данных / аналогичный и выберите столбцы в том порядке, в котором они вам нужны.
  2. Перед тем, кого вы хотите распечатать, найдите порядок в «левом» массиве, затем распечатайте соответствующее значение этого ключа в «правильном» массиве.

Ну, ваш вопрос необычен, обычно ассоциативные массивы используются для решения любых проблем, связанных с «позицией». Во всяком случае, есть много способов сделать то, что вы ищете, что вы ищете.

Вы можете использовать list (), но это позиция:

 foreach($oldArray as $o) { list($firstName,$lastName,$address,$id)=$oldArray; $newArray[]=array($id,$firstName,$lastName,$address); } 

Но лучший способ решить вашу проблему – заполнить массив прямо в правильном порядке вместо повторного сортировки после: