Индекс изменения заказывает в массиве

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

Левый массив

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, если он помогает!

5
задан Damian Polac 14 May 2016 в 11:40
поделиться

5 ответов

$output = array();
foreach ( $right as $array ) {
    foreach ( $left as $field ) {
        $temp[$field] = $array[$field];
    }
    $output[] = $temp;
}
8
ответ дан 18 December 2019 в 14:43
поделиться

Вы можете использовать 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
)

Это упрощает сравнение ключей позже.

3
ответ дан 18 December 2019 в 14:43
поделиться

Я бы сделал шаг назад и посмотрел, что вам действительно нужно сделать. Массив ассоциативен, так что вы можете мгновенно получить доступ к нужному элементу, верно? Так что вам действительно не нужно, чтобы он был в порядке, если вы не печатаете вывод с помощью foreach .

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

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

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

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

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

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

0
ответ дан 18 December 2019 в 14:43
поделиться

Вы должны взорвать массив Сохраните массив в переменной, подобной этой

$array = Array
(
    [0] => Array
    (
        [ID] => 3
        [FirstName] => Pim
        [LastName] => Svensson
        [Address] => Finland
    );

, а затем взорвите массив после взорвав массив, вы получите разделенные параметры массива, затем вы можете использовать функцию implode, чтобы расположить их в любом порядке, как вы хотите

2
ответ дан 18 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: