【发布时间】:2018-09-13 13:36:44
【问题描述】:
我有一个多维数组。如果它包含的总数据少于阈值$threshold = 1000 位/字节/任何数据,包括它的键,我想获取更多内容。
在性能/内存方面,获取数组大小的近似值最便宜的方法是什么?
现在,我使用strlen(serialize($array))。 根据 cmets 更新:
$threshold = 1000;
$myArray = array(
'size' => 0,
'items' => array(
['id' => 1, 'content' => 'Lorem ipsum'],
['id' => 2, 'content' => 'Dolor sit'],
['id' => 3, 'content' => 'Amet']
)
);
while($myArray['size'] < $threshold)
{
echo "Array size is below threshold.<br/>";
addStuffToArray($myArray);
}
function addStuffToArray(&$arr)
{
echo "Adding stuff to array.<br/>";
$newArrayItem = array(
'id' => rand(0, 10000),
'content' => rand(999999, 999999)
);
$arr['size'] += strlen(serialize($newArrayItem));
$arr['items'][] = $newArrayItem;
}
PHPFiddle here.
【问题讨论】:
-
您当前的代码有什么问题?当它关于字符的数量时,它可以完美地工作...... 如果它包含的阈值少于 $threshold = 1000 位/字节/任何数据的总阈值但是你不能比较苹果和橙子....
-
这是真的!我认为,大多数时候当我找到解决方案时,有更便宜/更快的方法可以达到相同的结果。由于这是要运行多次的代码的一部分,因此成本越低越好。
-
您想要精确的数据大小不包括密钥长度和序列化构造还是包括所有内容,json_encode 会提供更好的性能和更少的元数据?
-
这是个好主意。我对确切的数据大小不感兴趣,我想要一个关于数组有多大的大致概念。性能比确切的尺寸重要得多。我会试试 json_encode。我还发现了这个stackoverflow.com/questions/804045/…
-
另外,与其事后进行,不如在
addStuffToArray中进行,只需跟踪放入数组的数据,然后在 while 循环中查看该值。