Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组unset()行为-保留最后一个数组键?_Php_Arrays - Fatal编程技术网

PHP数组unset()行为-保留最后一个数组键?

PHP数组unset()行为-保留最后一个数组键?,php,arrays,Php,Arrays,我有一个由几个字符串(HTTP地址)构成的数组,我在这些字符串上运行PHP过滤器和unset()方法来删除无效的URL。但是,最后一个数组项永远不会被删除——我不知道为什么,也不知道如何解决这个问题。我希望你们能帮忙 $url1 = "http://localhost/work/project/scrapes/1.html"; $url2 = ""; $url3 = ""; $urls = array($url1, $url2, $url3); for($x = 0; $x < siz

我有一个由几个字符串(HTTP地址)构成的数组,我在这些字符串上运行PHP过滤器和
unset()
方法来删除无效的URL。但是,最后一个数组项永远不会被删除——我不知道为什么,也不知道如何解决这个问题。我希望你们能帮忙

$url1 = "http://localhost/work/project/scrapes/1.html";
$url2 = "";
$url3 = "";

$urls = array($url1, $url2, $url3);

for($x = 0; $x < sizeof($urls); $x++){
    if(!filter_var($urls[$x], FILTER_VALIDATE_URL)){
        unset($urls[$x]);
    }
}

print_r() gives me this:

Array ( [0] => http://localhost/work/project/scrapes/1.html [2] => )
$url1=”http://localhost/work/project/scrapes/1.html";
$url2=“”;
$url3=“”;
$urls=数组($url1、$url2、$url3);
对于($x=0;$xhttp://localhost/work/project/scrapes/1.html [2] => )

我不知道为什么
$URL[2]
仍然存在,为什么它没有被删除。

因为你动态计算
大小()
,只要你删除元素,它就会减少。因此,解决方法是在循环之前获得大小:

$url1 = "http://localhost/work/project/scrapes/1.html";
$url2 = "";
$url3 = "";

$urls = array($url1, $url2, $url3);
$size = sizeof($urls); // <----

for($x = 0; $x < $size; $x++){
    if(!filter_var($urls[$x], FILTER_VALIDATE_URL)){
        unset($urls[$x]);
    }
}

var_dump($urls);
$url1=”http://localhost/work/project/scrapes/1.html";
$url2=“”;
$url3=“”;
$urls=数组($url1、$url2、$url3);

$size=sizeof($url);// 这是因为在每次迭代中都要计算数组的大小

通过迭代:

  • sizeof($url)=3,$x=0,$x
  • sizeof($url)=2,$x=1,$x
  • sizeof($URL)=1,$x=2,$x
  • 在开始循环之前保存数组的长度

    $length = sizeof($urls);
    
    for($x = 0; $x < $length; $x++){
    }
    
    $length=sizeof($url);
    对于($x=0;$x<$length;$x++){
    }
    
    我没有意识到每次迭代都会重新计算大小。谢谢