Json数组移至顶部

时间:2018-09-18 21:44:20

标签: php json

我正在使用以下代码显示JSON:

<?php
$result = array();
array_push($result,
    array("id" => 1, "title" => "text 1"),
    array("id" => 2, "title" => "text 2"),
    array("id" => 3, "title" => "text 3"),
    array("id" => 4, "title" => "text 4")
);
echo json_encode($result);
?>

我想将ID 3移到顶部。这可能吗?我该怎么办?

结果应该是这样的:

[
    {
    "id": 3,
    "title": "text 3"
    },
    {
    "id": 1,
    "title": "text 1"
    },
    {
    "id": 2,
    "title": "text 2"
    },
    {
    "id": 4,
    "title": "text 4"
    }
]

2 个答案:

答案 0 :(得分:2)

您可以在对数组进行JSON编码之前对其进行排序。

$move_to_top = 3;

usort($result, function($a, $b) use ($move_to_top) {
    if ($a['id'] == $move_to_top) return -1;
    if ($b['id'] == $move_to_top) return 1;
    return $a['id'] - $b['id'];
});

这确实对数组进行了排序。如果您不希望移动当前一项而只保留当前订单,则可以对其进行迭代,然后在找到所需ID时,取消设置当前键,然后将该项目附加到数组的开头。

$move_to_top = 3;

foreach($result as $key => $item) {
    if ($item['id'] == $move_to_top) {
        unset($result[$key]);
        array_unshift($result, $item);
        break;
    }
}

json_encode(将项目移到顶部之后)。

echo json_encode($result);

答案 1 :(得分:2)

array_splice可以帮助您

System.InvalidOperationException: 'The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.'

结果:

$out = array_splice($result, 2, 1);
array_splice($result, 0, 0, $out);