我知道这里有很多这些未设置的问题,但这个问题有所不同。我试图创建一个数组,这是一个目录的部分列表,文件名为"。"," .."," feed.txt& #34;和" index.php"除去。这是代码:
var_dump($posts);
echo "this is arrayElementIsString(posts, file) before ->" . arrayElementIsString($posts, "index.php") . "<-
";
foreach($posts as $file) {
if($file == "." || $file == ".." || $file == "feed.txt" || $file == "index.php") {
unset($posts[arrayElementIsString($posts, $file)]);
}
}
echo "this is arrayElementIsString(posts, file) after ->" . arrayElementIsString($posts, "index.php") . "<-
";
var_dump($posts);
arrayElementIsString()是我写的一个函数。它在数组中搜索特定字符串并返回该数组元素的索引。这是:
function arrayElementIsString($array, $searchString) {
for($i=0; $i < count($array); $i++) {
if((string)$array[$i] == $searchString) {
return $i;
}
}
}
以下是此代码的输出:
array(6) {
[0]=>
string(1) "."
[1]=>
string(2) ".."
[2]=>
string(20) "another-new-post.php"
[3]=>
string(8) "feed.txt"
[4]=>
string(9) "index.php"
[5]=>
string(17) "new-test-post.php"
}
this is arrayElementIsString(posts, file) before ->4<-
this is arrayElementIsString(posts, file) after -><-
array(3) {
[2]=>
string(20) "another-new-post.php"
[4]=>
string(9) "index.php"
[5]=>
string(17) "new-test-post.php"
}
第一个var_dump显示完整的目录列表,行之间的第一个显示&#34; index.php&#34;的索引,下一行显示未设置的值,第二个var_dump显示&#34 ;的index.php&#34;在数组中仍然。
我没有得到的是为什么这适用于。,..和feed.txt,但是在明确取消设置后仍然会列出index.php。我已经尝试将index.php文件移动到if语句的中间,看看它是否会取消其中一个其他文件,但这并没有影响任何内容
答案 0 :(得分:1)
foreach($posts as $index => $file) {
if($file == "." || $file == ".." || $file == "feed.txt" || $file == "index.php") {
unset($posts[$index]);
}
}
永远删除arrayElementIsString
。
答案 1 :(得分:0)
删除foreach循环内的数组中的元素是个坏主意。因此,您应该设置一个新数组并执行以下操作:
$newArray = array();
foreach($posts as $file) {
if($file == "." || $file == ".." || $file == "feed.txt" || $file == "index.php") {
continue;
}
$newArray[] = $file;
}
答案 2 :(得分:0)
保持简单:
$posts = array([data_here]);
foreach($posts as $key => $value) {
if(in_array($value, array('.', '..', 'index.php', 'feed.txt')) {
unset($posts[$key]);
}
}
// Re-index your keys incase you want to use for loop later and what not
$posts = array_values($posts);
&#13;