我有一个多维数组,该数组由关联数组中的索引数组组成。
如何获取托管索引数组的indexed arrays
和associative arrays
的单独计数。
在我的情况下,使用sizeof($jArray, 1)
得出197,这是键值对+索引数组+关联数组(49 * 3 + 49 + 1)的总数。
Count($jArray)
的结果是1
,我猜这是关联数组。
JSON结构:
Name
│
│───[0]
│ └── Key -> Value
│ └── Key -> Value
│ └── Key -> Value
└───[1]
│ └── Key -> Value
│ └── Key -> Value
│ └── Key -> Value
│...
│
└───[n]
└── Key -> Value
└── Key -> Value
└── Key -> Value
我在这里寻找的数量是
49 - (indexed arrays within associative array 'Name')
147 - (total key-value pairs within indexed array)
3 - (key-value pairs within an indexed array)
答案 0 :(得分:0)
您始终可以使用count()来执行此操作,例如,如果您具有以下数组:
$arrs = [
'name1' => [
[
'key1'=>1,
'key2'=>2,
],
[
'key3'=>3,
],
[
'key4'=>4,
'key5'=>5,
'key6'=>6,
],
],
'name2' => [
[
'key7'=>7,
],
],
];
$ arrs是3阶的多维数组,要获取级别0中name1和name2(关联数组)的元素数量,可以使用:count($arrs);
,这将返回2。
如果您想要name1的元素数量:count($arrs[name1])
,则将返回3。
如果您想要name1和name2中的元素总数,
$total=0;
foreach($arrs as $arr) $total+=count($arr);
如果您想要键值对的总数:
foreach($arrs as $arr){
foreach($arr as $ar) $total+=count($ar);
}
答案 1 :(得分:0)
以下代码行可复制多维数组以用于测试目的:
$arrs=array_fill_keys(['name'],array_fill(0,49,['key1'=>1,'key2'=>2,'key3'=>2,]));
据此:
49-(关联数组“名称”中的索引数组)
147-(索引数组中的键值对总数)
3-(索引数组中的键/值对)
特别是第三行,所有计数都简化为可以通过这种方式实现的一些简单操作:
$InArWiAsArNa=count($arrs['name']);
$KV_wi_IA=count(current($arrs['name']));
$total_KV_pairs_wi_IA=$InArWiAsArNa*$KV_wi_IA;
var_dump($InArWiAsArNa,$total_KV_pairs_wi_IA,$KV_wi_IA);
输出:
int(49)
int(147)
int(3)
但是,如果您删除了第三个条件,例如,如果索引数组编号中的键值对是变量,则意味着您不再需要它,因此您应该遍历数组以获得两个第一个答案:
$InArWiAsArNa=0;
$total_KV_pairs_wi_IA=0;
foreach($arrs['name'] as $key=>$val){
$InArWiAsArNa ++;
$total_KV_pairs_wi_IA+=count($val);
}
var_dump($InArWiAsArNa,$total_KV_pairs_wi_IA);
输出:
int(49)
int(147)