Я ищу подход для сортировки массива массивов.
Вот упрощенный пример;
$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;
}