假设我有一个要排序的数组,该顺序不是可计算的,而是由另一个按所需顺序列出键的数组给出的:
$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);
有更好的方法吗?
答案 0 :(得分:2)
您可以将foreach
替换为array_replace()
$new_array = array_fill_keys($ordering_array, NULL);
$new_array = array_replace($new_array, $given_array);
$new_array = array_filter($new_array);
答案 1 :(得分:1)
您可以尝试
[woocommerce_product_filter] — shows a live Product Search Filter.
[woocommerce_product_filter_attribute] — shows a live Product Attribute Filter.
[woocommerce_product_filter_category] — shows a live Product Category Filter.
[woocommerce_product_filter_price] — shows a live Product Price Filter.
[woocommerce_product_filter_tag] — shows a live Product Tag Filter.
[product_category category="shirt"] - Displayed `shirt` category product
答案 2 :(得分:1)
在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);
答案 3 :(得分:1)
这是一个解决它的方法:
$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
答案 4 :(得分:0)
尝试使用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 );
答案 5 :(得分:0)
简单明了:
<?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])
修剪一个或两个字节。