php - 如何取消设置数组的值?
问题描述
我有一个数组,其中有大约数百万个键。但其中一些等于“DEL”,我想取消设置:
$array = array ("something1", "something2", "DEL", ... , "DEL", "DEL", "something else", "something else n");
我想用“DEL”从数组中取消设置这些键,但它可能是错误,它不会从数组中删除这些值。有什么问题?
这是代码:
<?php
$array = {"sfsff", "DEL", ... "DEL", "bcbcgh"};
for ($i=0; $i<sizeof($array); $i++)
{
if ($array[$i] == "DEL")
{
unset($array[$i]);
}
}
var_dump($array);
?>
在这里, var dump 将我打印出未更改的数组。有什么问题?
解决方案
尝试改变:
$array = {"sfsff", "DEL", "DEL", "bcbcgh"}; // Invalid array input
至
$array = ["sfsff", "DEL", "DEL", "bcbcgh"]; // this is an array
更新:
从您通过电子邮件共享的代码来看,for
由于内存问题,它在几千次迭代(在我的情况下为 45K)后打破了循环。原因是您每次迭代都在计算数组的大小,for ($i=0; $i < sizeof($array); $i++)
而在使用循环时这根本不是一个好的解决方案。您需要将代码更改为:
$length = count($newarray); // calculate the count first and then use it in the loop.
for ($i=0; $i < $length; $i++)
{
if ($newarray[$i] == "DEL") {
unset($newarray[$i]);
}
}
在这里,我们的$length
变量保存数组的大小,我们不会让我们的应用程序在每次循环时检查长度/计数。另外,我使用count()
了而不是sizeof()
因为count()
计算数组大小所需的时间更少。
根据一个基准,使用预先计算的变量而不是强制计算每个循环可以快 94%。这可以很快加起来。请参阅同一页上的Counting LoopsFor-loop 测试部分。
count()
您还可以查看和的情况下的时间差sizeof()
。
我希望这有帮助。
推荐阅读
- bash - ld:OS X 上的未知选项 -melf_i386
- reactjs - React Router 如何持久化状态对象?
- ffmpeg - 如何使用 FFmpeg 将网络摄像头直播到 YouTube?
- css - 无法使用 BS4 找到 CSS 选择器
- python - Python 将函数误认为是未定义的变量
- soapui - 使用财产转移时如何去除括号?
- c# - Visual Studio for Mac:日志在项目上工作并在 Azure 上显示,但在同一解决方案的另一个项目上失败
- python - 前向填充熊猫中的季节性数据
- java - java - 如何拥有资源文件
- php - ftp_get():下载大文件时打开BINARY模式数据连接