在响应中首先排序并显示具有最多值的数组 (php)

sort & display array with most values first in response (php)

我有以下内容:

        $myData = array();

        while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
            array_push($myData, $list);
        }
    
        header('Content-Type: application/json');
        // echo json_encode($myData); 
        echo "{\"data\":" .json_encode($myData). "}"; // contains multiple arrays

其中通过 sql 查询内容填充 kendo 网格 table.. 问题是第一个数组被 kendo 使用来创建列,并且首先输出的数组小于此后的大多数数组...

我如何将上面的输出排序为 include/output 我最长的数组 第一个 所以我的 kendo 将获取所有 header 数据以填充最大列数

如果所有数组都是一维的,那么这也许会有所帮助:

<?php

usort($myData, function ($a, $b) { return count($a) < count($b); });

要按内部数组的长度降序排序,您需要比较回调中第二个参数与第一个参数的长度;您需要 return 一个正值、负值或零值,具体取决于长度是大于、小于还是等于另一个。您可以简单地通过减法来做到这一点。例如:

$myData = array(
    array('key2' => 'value1', 'key3' => 'value1', 'key4' => 'value4'),
    array('key4' => 'value4'),
    array('key1' => 'value1', 'key4' => 'value4'),
    array('key1' => 'value1', 'key2' => 'value1', 'key3' => 'value1', 'key4' => 'value4')
);

usort($myData, function ($a, $b) { return count($b) - count($a); });

print_r($myData);

输出:

Array
(
    [0] => Array
        (
            [key1] => value1
            [key2] => value1
            [key3] => value1
            [key4] => value4
        )
    [1] => Array
        (
            [key2] => value1
            [key3] => value1
            [key4] => value4
        )
    [2] => Array
        (
            [key1] => value1
            [key4] => value4
        )
    [3] => Array
        (
            [key4] => value4
        )
)

Demo on 3v4l.org

请注意,与其自己创建 JSON,这很容易出错,您可以通过 json 编码新数组来生成所需的输出:

echo json_encode(array('data' => $myData));

输出(对于我的示例数据):

{
    "data": [
        {
            "key1": "value1",
            "key2": "value1",
            "key3": "value1",
            "key4": "value4"
        },
        {
            "key2": "value1",
            "key3": "value1",
            "key4": "value4"
        },
        {
            "key1": "value1",
            "key4": "value4"
        },
        {
            "key4": "value4"
        }
    ]
}