![](/img/trans.png)
[英]What is the best way to randomize an array's order in PHP without using the shuffle() function?
[英]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.