我得到了以下数组:
["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)
}
我需要对其进行排序(键应保留):
1st-显示具有定义的原始照片的元素(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
进行排序?任何想法都将受到欢迎,谢谢。
答案 0 :(得分:2)
比较功能可能会有些挑战:
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”)进行排序和保留。
然后,该函数检查是否都具有请求的键和值。如果是这样,我们必须比较他们的信心。如果其中之一没有,我们已经可以决定它们是高/低。如果两者都没有钥匙,我们必须再次比较他们的信心。您可能需要调整或修正错误,但通常这应该为您指明正确的方向。