php获取数组的数据大小

时间:2012-01-26 13:19:31

标签: php arrays size

拥有这个数组:

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不会在这里完成工作。

4 个答案:

答案 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);
}

我希望它会有所帮助。