php - 按其键的特定顺序对数组进行排序
问题描述
我希望能够以特定的键顺序对数组进行排序。
假设以下数组:
$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
的 's 做到这一点。我只是想到了排序数组解决方案,因为它会更加优雅和简短。因此,我将首先按优先顺序对数组进行排序,然后取第一个值。
如果有人有更好的解决方案,请随时详细说明。TIA
解决方案
我相信我知道你在做什么,这是我已经使用了一段时间的一个函数,它允许对关联/多维数组进行排序:
/**
* 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);
推荐阅读
- tiff - 我想将我的 .tif 文件转换为 R 中的 .asc
- c# - 设计问题:需要一些关于如何构建类继承以避免重复代码的提示
- django - 当值不存在时设置一个值
- c# - MSBuild on Server errorCS0234 错误.net 4.7.2
- redis - docker-compose 中的 Redis 主从设置 - 只读从属
- c - 程序以进程状态终止 -1073741819 - graphics.h
- azure-logic-apps - HTTP 操作中的 URI 重复
- javascript - 如何在后续保存时重新启动 Gulp 任务?
- python - PyCharm 认为函数“open”没有参数“opener”
- python - 如何遍历 hdf5 文件中的所有键和值并确定哪些包含数据?