Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数一数“的数量;“列”;在数组中(php)_Php_Json_Count - Fatal编程技术网

数一数“的数量;“列”;在数组中(php)

数一数“的数量;“列”;在数组中(php),php,json,count,Php,Json,Count,我有以下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":"",

我有以下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。 我尝试过回声计数($data_数组);(或sizeof)结果是3(行数)。考虑到必须将特定行的最大列数设置为列数,如何计算此Json中的“列”数? 我必须使用循环计数还是可以用一条指令计数?

count($data\u array)
计算数组中的元素数。在你的情况下,是3。但是您的数组是多维的(矩阵)。因此,您需要依靠一些索引来获取该位置上的列数:

<?php
echo count($data_array[0]);
计数($data\u数组)
计算数组中的元素数。在你的情况下,是3。但是您的数组是多维的(矩阵)。因此,您需要依靠一些索引来获取该位置上的列数:

<?php
echo count($data_array[0]);

假设某个var$json包含上面的json代码,您应该知道以下代码将生成类型为stdClass的数组:

$data\u array=json\u decode($json);
所以$data_数组实际上是一个数组,但它包含对象。正如您所指出的,这将返回JSON中的行数:

echo sizeof($data\u数组);
显然,列的数量不是行的数量。如果想知道列数,则需要检查
$data\u数组
var的一个或多个行/对象/元素。最好只查看第一个元素:

$col_count = sizeof($data_array[0]);
但是,如果$data_数组的元素是stdClass类型的对象,这将导致E_警告:

PHP Warning:  sizeof(): Parameter must be an array or an object that implements Countable in /tmp/foo.php on line 33
您可以选择使用函数的第二个参数,该参数将强制PHP将JSON代码中每个带花括号的对象解码为关联数组,而不是stdClass对象:

$data\u array=json\u decode($json,TRUE);
$col_count=sizeof($data_数组[0]);
这将产生一个
$colu count
6
,该值对于数组中的第一个对象是正确的。您应该考虑到$DATAAL数组中后面的元素可能有更多或更少的列,这取决于数据的结构。如果您确信所有元素的列数都相同,这就足够了,但如果您有凌乱的数据,则可能需要检查数据数组的每个元素,以查看真正的列数:

$data\u array=json\u decode($json,TRUE);
$col_count=0;
foreach($data\u数组作为$row){
$col_count=max($col_count,sizeof($row));
}
变量转储(列计数);
这将产生一个
$col_count
值,该值反映JSON中任何元素中遇到的最大列数。显然,如果JSON包含大量元素,可能需要考虑性能。这完全取决于JSON数据和应用程序的性质

编辑: 我认为您可以不使用显式的foreach循环,但仍然需要PHP在数据结构中循环。也就是说,它可能会更快:

$max\u col\u count=max(数组映射(“计数”,“数据数组”);

假设某个var$json包含上面的json代码,您应该知道以下代码将生成一个类型为stdClass的数组:

$data\u array=json\u decode($json);
所以$data_数组实际上是一个数组,但它包含对象。正如您所指出的,这将返回JSON中的行数:

echo sizeof($data\u数组);
显然,列的数量不是行的数量。如果想知道列数,则需要检查
$data\u数组
var的一个或多个行/对象/元素。最好只查看第一个元素:

$col_count = sizeof($data_array[0]);
但是,如果$data_数组的元素是stdClass类型的对象,这将导致E_警告:

PHP Warning:  sizeof(): Parameter must be an array or an object that implements Countable in /tmp/foo.php on line 33
您可以选择使用函数的第二个参数,该参数将强制PHP将JSON代码中每个带花括号的对象解码为关联数组,而不是stdClass对象:

$data\u array=json\u decode($json,TRUE);
$col_count=sizeof($data_数组[0]);
这将产生一个
$colu count
6
,该值对于数组中的第一个对象是正确的。您应该考虑到$DATAAL数组中后面的元素可能有更多或更少的列,这取决于数据的结构。如果您确信所有元素的列数都相同,这就足够了,但如果您有凌乱的数据,则可能需要检查数据数组的每个元素,以查看真正的列数:

$data\u array=json\u decode($json,TRUE);
$col_count=0;
foreach($data\u数组作为$row){
$col_count=max($col_count,sizeof($row));
}
变量转储(列计数);
这将产生一个
$col_count
值,该值反映JSON中任何元素中遇到的最大列数。显然,如果JSON包含大量元素,可能需要考虑性能。这完全取决于JSON数据和应用程序的性质

编辑: 我认为您可以不使用显式的foreach循环,但仍然需要PHP在数据结构中循环。也就是说,它可能会更快:

$max\u col\u count=max(数组映射(“计数”,“数据数组”);

完全正确。6而不是5.正确地纠正了。6而非5.正确更正,感谢$max_col_count=max(数组映射(“count”,$data_数组));工作得很漂亮。祝贺你,感谢你详细而准确的回答!我的荣幸!感谢您的礼貌回应和投票$max_col_count=max(数组映射(“计数”,“数据数组”);工作得很漂亮。祝贺你,感谢你详细而准确的回答!我的荣幸!谢谢你礼貌的回答