簡體   English   中英

在PHP中使用另一個數組排序數組的最佳方法是什么?

[英]what's the best way to order an array using another in PHP?

假設我有一個要排序的數組,並且該順序不是可計算的,而是由另一個按所需順序列出鍵的數組給出的:

$ordering_array = [
    'c',
    'a',
    'k',
    'e',
];

更為復雜的是,並不是所有這些鍵都可以在我的數組中進行排序:

$given_array = [
    'a' => 'value',
    'c' => 'value',
    'e' => 'value',
];

最干凈/最快的方法是什么?

我的方法是:

$new_array = array_fill_keys($ordering_array, NULL);

foreach ($given_array as $key => $value) {
  $new_array[$key] = $value;
}

$new_array = array_filter($new_array);

有沒有更好的辦法?

您可以用array_replace()替換foreach

$new_array = array_fill_keys($ordering_array, NULL);
$new_array = array_replace($new_array, $given_array);
$new_array = array_filter($new_array);

你可以試試這個

$filteredKeys = array_intersect_key(array_flip($ordering_array), $given_array);
$outputArray = array_merge($filteredKeys, $given_array);

在foreach的位置使用array_merge()array_replace ,兩者都有效

嘗試這個:

$ordering_array = ['c', 'a', 'k', 'e'];
$given_array = ['a' => 'value', 'c' => 'value', 'e' => 'value'];

$new_array = array_fill_keys($ordering_array, NULL);

$new_array = array_merge($new_array, $given_array);
                       OR
$new_array = array_replace($new_array, $given_array);

$new_array = array_filter($new_array);

這是一個解決它的方法:

$ordering_array = ['c', 'a', 'k', 'e'];
$given_array = ['a' => 'value', 'c' => 'value', 'e' => 'value'];
$outputArray = array_merge(array_intersect_key(array_flip($ordering_array), $given_array), $given_array);
print_r($outputArray);

@rkj很近,但這是完成的過程

在這里測試: http : //sandbox.onlinephpfunctions.com/code/95b30f6e402b1afdb18867471888ff8ba38867de

嘗試使用uksort

演示

<?php 
    $ordering_array  = [
        'c',
        'a',
        'k',
        'e',
    ];
    $given_array  = [
        'a' => 'value-a',
        'c' => 'value-c',
        'e' => 'value-e',
    ];

    uksort($given_array , function ($a, $b) use ($ordering_array) {

        $pos_a = array_search($a,$ordering_array);
        $pos_b = array_search($b,$ordering_array);
        return $pos_a - $pos_b;
    });

    var_dump($given_array );

簡單明了:

<?php    
$ordering_array = [
    'c',
    'a',
    'k',
    'e',
];

$given_array = [
    'a' => 'valuea',
    'c' => 'valuec',
    'e' => 'valuee',
];

foreach($ordering_array as $K)
    if(array_key_exists($K, $given_array))
        $ordered[$K] = $given_array[$K];

var_export($ordered);

輸出:

array (
  'c' => 'valuec',
  'a' => 'valuea',
  'e' => 'valuee',
)

如果數據允許,您可以使用isset($given_array[$K])一兩個字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM