拥有这个数组:
Array
(
[_block1] => Array
(
[list] => Array
(
[sub-list] => Array
(
)
)
[links] => Number
[total] => Number
...
)
[_block2] => Array
(
[@attributes] => Array
(
)
[title] => ...
[data] => Array ()
...
)
[_block3] => Array
(
..
)
)
这些块包含api返回的数据。知道每个api以不同的方式/结构返回数据我需要测量/计算每个api和其中一个内部的数据/大小,然后执行if data > X
或<做点什么。
有可能吗?我搜索了谷歌,但我只找到了count()
,这不是我需要做的工作。
修改 这些块中的每一个都包含许多其他子块,我正在考虑以字节为单位计算数据大小,因为count不会在这里完成工作。
答案 0 :(得分:22)
echo mb_strlen(serialize((array)$arr), '8bit');
答案 1 :(得分:12)
如果我理解你的问题,你需要主阵列中每个“块”子阵列的大小。
您可以这样做:
$sizes = array();
foreach($returnedArray as $key => $content) {
$sizes[$key] = count($content);
}
$sizes
数组将是一个关联数组,其中各种“块”作为键,数据大小作为值。
编辑: 在编辑问题之后,如果最里面的数组中的数据是字符串或整数,你可以使用这样的函数:
function getSize($arr) {
$tot = 0;
foreach($arr as $a) {
if (is_array($a)) {
$tot += getSize($a);
}
if (is_string($a)) {
$tot += strlen($a);
}
if (is_int($a)) {
$tot += PHP_INT_SIZE;
}
}
return $tot;
}
假设只有ASCII编码的字符串。
答案 2 :(得分:3)
你的意思是这样吗?
$x = 32;
foreach($blocks as $key => $block)
{
if(getArraySize($block) < $x)
{
//Do Something
}else
{
//Do another thing
}
}
//Recursive function
function getArraySize($array)
{
$size = 0;
foreach($array as $element)
{
if(is_array($element))
$size += getArraySize($element);
else
$size += strlen($element);
}
return $size;
}
答案 3 :(得分:3)
要获得以字节为单位的大小,您可以使用以下代码。
$serialized = serialize($foo);
if (function_exists('mb_strlen')) {
$size = mb_strlen($serialized, '8bit');
} else {
$size = strlen($serialized);
}
我希望它会有所帮助。