3 回答

TA贡献1827条经验 获得超9个赞
假设两个数组都按公共因素(即 )排序id。
uksort($arrayOriginal, function($a, $b) use ($arrayClean) {
return $arrayClean[$a]['surface'] < $arrayClean[$b]['surface'];
});
再次强调,要使其工作,两个数组必须包含相同顺序的元素。在您的情况下,两个数组的元素必须按以下顺序(按 ID)排列:100、5465、40489
但我宁愿做类似的事情:
usort($arrayOriginal, function($a, $b) {
return yourSurfaceCleanMethod($arrayOriginal['surface']) < yourSurfaceCleanMethod($arrayOriginal['surface']);
});
当然,一切都取决于您的需要,但是如果您$arrayClean仅将其用作对原始数组进行排序的参考并且您yourSurfaceCleanMethod手边有它,我肯定会执行上述操作。

TA贡献1854条经验 获得超8个赞
我认为如果您的 arrayOriginal 应该根据 HTML 标记的内容进行排序,则不需要 arrayClean。
strip_tags()可用于排序函数中。
usort($arrayOriginal, function($a, $b) { return strip_tags($b['surface']) <=> strip_tags($a['surface']); });
注意:使用飞船操作符<=>得到正确的比较结果1、0和-1。

TA贡献1851条经验 获得超3个赞
我礼貌地接受了 Nemoden 的回答,因为从技术上讲,它根据其范围(所提供的测试用例)回答了问题。但这是我发现最适合我的解决方案:
$arrayOriginal = array(
array('id' => '100','surface' => '<span>300</span>','whatever' => 'qSDqsd'),
array('id' => '5465','surface' => '100 ch','whatever' => 'ghjkghjk'),
array('id' => '40489','surface' => '<b>1000</b>','whatever' => 'fgsdfg')
);
$arrayClean = array(
array('id' => '100','surface' => '300','whatever' => 'qSDqsd'),
array('id' => '5465','surface' => '100','whatever' => 'ghjkghjk'),
array('id' => '40489','surface' => '1000','whatever' => 'fgsdfg')
);
$surface = array_column($arrayClean, 'Surface');
array_multisort($surface, SORT_DESC, SORT_REGULAR, $arrayOriginal);
然后我得到这个输出,这正是我想要的:
Array
(
[0] => Array
(
[id] => 40489
[surface] => <b>1000</b>
[whatever] => fgsdfg
)
[1] => Array
(
[id] => 100
[surface] => <span>300</span>
[whatever] => qSDqsd
)
[2] => Array
(
[id] => 5465
[surface] => 100 ch
[whatever] => ghjkghjk
)
)
Nemoden 的回答非常有帮助,但无论出于何种原因,它给了我这个:
Array
(
[1] => Array
(
[id] => 40489
[surface] => <b>1000</b>
[whatever] => fgsdfg
)
[0] => Array
(
[id] => 100
[surface] => <span>300</span>
[whatever] => qSDqsd
)
[2] => Array
(
[id] => 5465
[surface] => 100 ch
[whatever] => ghjkghjk
)
)
子数组以正确的顺序打印,但子数组索引未更改。因此,当导出到 javascript“arrayOriginal”时,它会回到其初始排序,因为子数组将再次根据它们的索引重新排序。至少,我是这样经历的。
不管怎样,现在问题已经解决了,我在这里得到的答案非常有帮助。
- 3 回答
- 0 关注
- 199 浏览
添加回答
举报