Застрявший отчасти на этом некоторое время теперь, таким образом, любая справка ценилась бы. У меня есть один массив (слева), который содержит список элементов, цель состоит в том, чтобы отсортировать, другой выстраивает (справа) ключи со значениями от левого массива.
Левый массив
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
)
Это упрощает сравнение ключей позже.
Я бы сделал шаг назад и посмотрел, что вам действительно нужно сделать. Массив ассоциативен, так что вы можете мгновенно получить доступ к нужному элементу, верно? Так что вам действительно не нужно, чтобы он был в порядке, если вы не печатаете вывод с помощью foreach
.
Я бы предложил одно из следующих решений:
Ну, ваш вопрос необычный, обычно ассоциативные массивы используются для решения любых проблем с "положением". Во всяком случае, их много способ делать то, что вы ищете, то, что вы ищете.
Вы можете использовать list (), но он основан на позиции:
foreach($oldArray as $o)
{
list($firstName,$lastName,$address,$id)=$oldArray;
$newArray[]=array($id,$firstName,$lastName,$address);
}
Но лучший способ решить вашу проблему - это заполнить массив непосредственно в правильном порядке вместо повторной сортировки после:)
Вы должны взорвать массив Сохраните массив в переменной, подобной этой
$array = Array
(
[0] => Array
(
[ID] => 3
[FirstName] => Pim
[LastName] => Svensson
[Address] => Finland
);
, а затем взорвите массив после взорвав массив, вы получите разделенные параметры массива, затем вы можете использовать функцию implode, чтобы расположить их в любом порядке, как вы хотите