【发布时间】:2020-04-12 16:22:26
【问题描述】:
我正在寻找一种对数组进行排序的方法。
这里是简化的例子;
$myArray = [
['ref' => 103, 'refList' => '101,102,111'],
['ref' => 104, 'refList' => '101,103'],
['ref' => 105, 'refList' => '106,103'],
['ref' => 106, 'refList' => '103,104,110'],
];
数组项的排序规则是;
“refList”中包含引用的项目必须位于任何具有匹配“ref”的项目之后
所以在这种情况下,正确的顺序是;
['ref' => 103, 'refList' => '101,102,111'],
['ref' => 104, 'refList' => '101,103'],
['ref' => 106, 'refList' => '103,104'],
['ref' => 105, 'refList' => '106,103,110'],
我尝试了一些非常冗长的方法以及 usort(),但无法做到这一点。我沿着以下路线走;
usort($myArray, 'refSorter');
function refSorter($a, $b) {
$arrayOfRefs = explode(',', $b['refList']);
if (in_array($a['ref'], $arrayOfRefs)) {
return 1;
}
return 0;
}
【问题讨论】:
-
你快接近了。您需要检查关系并根据两者中发现的参考差异返回结果