我希望能够按特定的键顺序对数组进行排序。
假设有以下数组:
$titles = array(
'United States' => 'Dibbuk Box',
'Australia' => 'The Possession',
'UK' => 'The Possession',
'getTitle' => 'The Possession',
);
首选项数组(键的排序顺序将由此确定)将类似于:
$preference = array(
'UK',
'USA',
'World-wide, English title',
'United Kingdom',
'United Kingdom, English title',
'United States',
'United States, English title',
'World-wide',
'Australia',
'getTitle',
);
所以在排序发生后,我希望第一个数组变成这样:
$titles = array(
'UK' => The Possession',
'United States' => 'Dibbuk Box',
'Australia' => 'The Possession',
'getTitle' => 'The Possession',
)
所以我的印象是下面的代码可以工作,但它没有......
array_multisort($preference, SORT_STRING, $titles);
我做错了什么?
实际上,我想要实现的是根据顺序或偏好检索电影标题。所以我想获得 UK
标题。如果没有,我想获得 USA
标题。如果那不可用,我想使用 World-wide, English title
等...
我知道我可以使用嵌套的 if/else
来做到这一点。我只是想到了排序数组解决方案,因为它会更优雅和简短。所以,我会先按照偏好的顺序对数组进行排序,然后我会取第一个值。
如果有人想到了更好的解决方案,请随时详细说明。 TIA
答案 0 :(得分:1)
我相信我知道你的意思,这是我使用了一段时间的函数,它允许对关联/多维数组进行排序:
/**
* Sort multi-dimensional array.
* Extend array_multisort()
* Usage: arrayOrderby($array, $value, SORT_FLAG, $value, SORT_FLAG)
* See: http://php.net/manual/en/function.array-multisort.php
*
* @return array
*/
function arrayOrderby() {
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
if (is_string($field)) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
在单个关联数组上使用此示例:
<块引用>arrayOrderby($results, 'column_name', SORT_DESC);