2 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
假設某些 var $json 包含您上面的 JSON 代碼,您應該知道以下代碼將生成stdClass類型的對象數(shù)組:
$data_array = json_decode($json);
所以 $data_array 實際上是一個數(shù)組,但它包含對象。正如您所指出的,這將返回JSON中的行數(shù):
echo sizeof($data_array);
顯然,列數(shù)不是行數(shù)。如果您想知道列數(shù),則需要檢查$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函數(shù)的第二個參數(shù),這將強制 PHP 將 JSON 代碼中的每個大括號對象解碼為關聯(lián)數(shù)組而不是 stdClass 對象:
$data_array = json_decode($json, TRUE);
$col_count = sizeof($data_array[0]);
這會產(chǎn)生一個$col_count值,該值對于數(shù)組中的第一個對象6是正確的。您應該考慮 $data_array 中后面的元素可能有更多或更少的列,具體取決于數(shù)據(jù)的結構。如果您確定所有元素將具有相同的列數(shù),這就足夠了,但是如果您有雜亂的數(shù)據(jù),您可能需要檢查數(shù)據(jù)數(shù)組的每個元素以查看真實的列數(shù)是多少:
$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);
這將產(chǎn)生一個$col_count值,該值反映 JSON 的任何元素中遇到的最大列數(shù)。顯然,如果您的 JSON 包含大量元素,則可能需要考慮性能。這完全取決于您的 JSON 數(shù)據(jù)和應用程序的性質。
編輯:我認為你可以擺脫這個,而不是顯式的 foreach 循環(huán),但它仍然需要 PHP 循環(huán)遍歷你的數(shù)據(jù)結構。也就是說,它可能會更快:
$max_col_count = max(array_map("count", $data_array));

TA貢獻1853條經(jīng)驗 獲得超18個贊
count($data_array)計算數(shù)組中元素的數(shù)量。在您的情況下,是 3。但是您的數(shù)組是多維的(矩陣)。因此,您需要依靠一些索引來獲取該位置的列數(shù):
<?php
echo count($data_array[0]);
- 2 回答
- 0 關注
- 173 瀏覽
添加回答
舉報