计算多维数组中的字节数

问题描述 投票:0回答:5

有了这个数组:

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 在这里不起作用。

php arrays multidimensional-array size
5个回答
33
投票
echo  mb_strlen(serialize((array)$arr), '8bit');

16
投票

如果我很好地理解你的问题,你需要主数组内每个“块”子数组的大小。

你可以这样做:

$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 编码的字符串。


6
投票

要获取以字节为单位的大小,您可以使用以下代码。

$serialized = serialize($foo);
if (function_exists('mb_strlen')) {
    $size = mb_strlen($serialized, '8bit');
} else {
    $size = strlen($serialized);
}

希望对您有帮助。


5
投票

你的意思是这样的吗?

$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;
}

1
投票

获取数组大小(以字节为单位):

<?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
© www.soinside.com 2019 - 2024. All rights reserved.