计算数组中“列”的数量(php)

我有以下 JSON:


   { 

      "0":"2019-08-31",

      "1":"Bank Exp.",

      "2":"AED",

      "3":"30",

      "4":"",

      "5":"BANK FEE 10"

   },


   { 

      "0":"2019-08-31",

      "1":"Inventory",

      "2":"AED",

      "3":"122",

      "4":"",

      "5":"DEPOSIT 10000"

   },


   { 

      "0":"2019-08-31",

      "1":"Petty Cash",

      "2":"AED",

      "3":"4999",

      "4":"",

      "5":"DEPOSIT 10000"

   }

]

我正在尝试计算 Json 中元素或列的数量。结果应该是 6。我试过 echo count($data_array); (或 sizeof)结果为 3(行数)。考虑到我必须将特定行的最大列数设置为列数,我如何计算这个 Json 中的“列”?我必须使用循环来计数还是可以用一条指令来计算?


白衣非少年
浏览 181回答 2
2回答

墨色风雨

假设某些 var $json 包含您上面的 JSON 代码,您应该知道以下代码将生成stdClass类型的对象数组:$data_array = json_decode($json);所以 $data_array 实际上是一个数组,但它包含对象。正如您所指出的,这将返回JSON中的行数:echo sizeof($data_array);显然,列数不是行数。如果您想知道列数,则需要检查$data_arrayvar 的一个或多个行/对象/元素。只看第一个元素是方便的:$col_count = sizeof($data_array[0]);但是,如果 $data_array 的元素是 stdClass 类型的对象,这将导致 E_WARNING:PHP Warning:  sizeof(): Parameter must be an array or an object that implements Countable in /tmp/foo.php on line 33您可以选择使用json_decode函数的第二个参数,这将强制 PHP 将 JSON 代码中的每个大括号对象解码为关联数组而不是 stdClass 对象:$data_array = json_decode($json, TRUE);$col_count = sizeof($data_array[0]);这会产生一个$col_count值,该值对于数组中的第一个对象6是正确的。您应该考虑 $data_array 中后面的元素可能有更多或更少的列,具体取决于数据的结构。如果您确定所有元素将具有相同的列数,这就足够了,但是如果您有杂乱的数据,您可能需要检查数据数组的每个元素以查看真实的列数是多少:$data_array = json_decode($json, TRUE);$col_count = 0;foreach($data_array as $row) {        $col_count = max($col_count, sizeof($row));}var_dump($col_count);这将产生一个$col_count值,该值反映 JSON 的任何元素中遇到的最大列数。显然,如果您的 JSON 包含大量元素,则可能需要考虑性能。这完全取决于您的 JSON 数据和应用程序的性质。编辑:我认为你可以摆脱这个,而不是显式的 foreach 循环,但它仍然需要 PHP 循环遍历你的数据结构。也就是说,它可能会更快:$max_col_count = max(array_map("count", $data_array));

慕容森

count($data_array)计算数组中元素的数量。在您的情况下,是 3。但是您的数组是多维的(矩阵)。因此,您需要依靠一些索引来获取该位置的列数:<?phpecho count($data_array[0]);
打开App,查看更多内容
随时随地看视频慕课网APP