php - php按非数字值排序多维数组,然后按数字
问题描述
我得到以下数组:
["person41"]=>
array(2) {
["original"]=>
string(29) "photo_1.jpg"
["confidence"]=>
float(0.99999)
}
["person42"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.99998)
}
["person33"]=>
array(2) {
["original"]=>
string(29) "photo_2018.jpg"
["confidence"]=>
float(0.99998)
}
["person43"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.9995)
}
["person44"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.9996)
}
我需要对它进行排序(应保留键):第一个 - 显示具有定义的原始照片的元素(original
不等于original_photo_not_defined.jpg
),第二个 - 所有那些original_photo_not_defined.jpg
应该confidence
首先从 0.99999 开始排序。所以最终的数组应该如下所示:
["person41"]=>
array(2) {
["original"]=>
string(29) "photo_1.jpg"
["confidence"]=>
float(0.99999)
}
["person33"]=>
array(2) {
["original"]=>
string(29) "photo_2018.jpg"
["confidence"]=>
float(0.99998)
}
["person42"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.99998)
}
["person44"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.9996)
}
["person43"]=>
array(2) {
["original"]=>
string(30) "original_photo_not_defined.jpg"
["confidence"]=>
float(0.9995)
}
我试过这个解决方案:
function cmp(array $a, array $b) {
if (($cmp = strcmp($a['foo'], $b['foo'])) !== 0) {
return $cmp;
} else {
return $a['baz'] - $b['baz'];
}
}
但我不确定original_photo_not_defined.jpg
应该将元素放在哪里以及如何排序confidence
?欢迎任何想法,谢谢。
解决方案
比较功能可能有点挑战性:
uasort($data, function (array $a, array $b) {
if (array_key_exists('name', $a) && $a['name'] != 'not_valid.png') {
if (array_key_exists('name', $b) && $b['name'] != 'not_valid.png') {
if ($a['confidence'] == $b['confidence']) {
return 0;
}
return $a['confidence'] > $b['confidence'] ? -1 : 1;
}
return -1;
} else if (array_key_exists('name', $b) && $b['name'] != 'not_valid.png') {
return 1;
}
if ($a['confidence'] == $b['confidence']) {
return 0;
}
return $a['confidence'] > $b['confidence'] ? -1 : 1;
});
基本上,您必须返回 1、0、-1,具体取决于一个在另一个之前还是在另一个之后,或者两者都在同一级别上。与uasort
您一起排序并保留数组键(在您的情况下为“personXX”)。
然后该函数检查两者是否具有请求的键和值。如果是这样,我们必须比较他们的信心。如果其中一个没有,我们已经可以决定它们是更高/更低。如果双方都没有钥匙,我们要再次比较他们的信心。您可能需要调整或修正错误,但通常这应该为您指明正确的方向。
推荐阅读
- r - 在r中将礼物/缺席表争吵成长格式
- angular - 无法从 Firestore 获取数据
- json - 如何解析具有字典键:值对的 json 数据?我正在尝试提取符号和值对
- macos - mkdir -p [要创建的目录]:“-p”代表什么?
- typescript - 使用 typescript 在 react-admin v3 中扩展数据提供者
- ios - iOS:动画占位符,如材料设计文本字段占位符
- c++ - 如何在 C++11 中检查分离线程的状态?
- python - 如何按名称获取外键表字段
- swift - 如何以通用方法获取 Firestore 文档 ID?
- javascript - 如何在 VueJS 中将值从一个子组件传递到另一个子组件?