有了这个数组:
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
或 < do something.
可能吗?我已经搜索了谷歌,但我只找到了
count()
,这不是我需要做的。
编辑: 这些块中的每个块都包含许多其他子块,我正在考虑以字节为单位计算数据大小,因为 count 在这里不起作用。
echo mb_strlen(serialize((array)$arr), '8bit');
如果我很好地理解你的问题,你需要主数组内每个“块”子数组的大小。
你可以这样做:
$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 编码的字符串。
要获取以字节为单位的大小,您可以使用以下代码。
$serialized = serialize($foo);
if (function_exists('mb_strlen')) {
$size = mb_strlen($serialized, '8bit');
} else {
$size = strlen($serialized);
}
希望对您有帮助。
你的意思是这样的吗?
$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;
}
获取数组大小(以字节为单位):
<?php
$array = [1, 2, 3];
$json = json_encode($array); // JSON_PRETTY_PRINT for multiline json formatting
echo mb_strlen($json, '8bit') . " bytes\n"; // output - 7 bytes
// for multidimensional array
$array = [['a','b','c'], ['e','f','g']];
$json = json_encode($array, JSON_FORCE_OBJECT); // JSON_PRETTY_PRINT | JSON_FORCE_OBJECT for multiline json formatting
echo mb_strlen($json, '8bit') . " bytes\n"; // output - 61 bytes