重新排列PHP数组

时间:2017-03-19 09:43:19

标签: php arrays

我有2个查询产生这两个数组

[{"FGNo":"5"},{"FGNo":"3"},{"FGNo":"4"},{"FGNo":"6"}]

[{"FGNo":"3","Actual":"48"},{"FGNo":"4","Actual":"38"},{"FGNo":"5","Actual":"41"},{"FGNo":"6","Actual":"16"}

我不知道如何使用第一个数组来排列第二个数组

{"FGNo":"5","Actual":"41"},[{"FGNo":"3","Actual":"48"},{"FGNo":"4","Actual":"38"},,{"FGNo":"6","Actual":"16"}

我尝试使用嵌套for循环,但我似乎无法使其正常工作。

1 个答案:

答案 0 :(得分:0)

此示例使用usort()和自定义值比较功能。因为你的"阵列"是我们需要使用json_decode()将它们转换为PHP数组的JSON对象。然后我们需要创建一个数组,用于对较大的数组进行排序 请参阅下面的code from hassan

$orderArray = json_decode('[{"FGNo":"5"},{"FGNo":"3"},{"FGNo":"4"},{"FGNo":"6"}]', true);
$arrayToSort = json_decode('[{"FGNo":"3","Actual":"48"},{"FGNo":"4","Actual":"38"},{"FGNo":"5","Actual":"41"},{"FGNo":"6","Actual":"16"}]', true);

$keys = array_flip(array_column($orderArray, 'FGNo'));

usort($arrayToSort, function($a, $b) use ($keys) {
    if ($keys[$a['FGNo']] == $keys[$b['FGNo']]) {
        return 0;
    }

    return $keys[$a['FGNo']] < $keys[$b['FGNo']] ? -1 : 1;
});

print_r(json_encode($arrayToSort));
// [{"FGNo":"5","Actual":"41"},{"FGNo":"3","Actual":"48"},{"FGNo":"4","Actual":"38"},{"FGNo":"6","Actual":"16"}]

$arrayToSort函数之后忘记json_encode() usort()