2 回答

TA贡献1853条经验 获得超6个赞
假设某些 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));

TA贡献1853条经验 获得超18个赞
count($data_array)计算数组中元素的数量。在您的情况下,是 3。但是您的数组是多维的(矩阵)。因此,您需要依靠一些索引来获取该位置的列数:
<?php
echo count($data_array[0]);
- 2 回答
- 0 关注
- 179 浏览
添加回答
举报