If语句中的PHP取消设置命令不起作用

时间:2017-09-18 21:32:08

标签: php

我想在回显“1”结果之后从数组中取消设置HTTP Posted键,但是unset似乎不起作用。我该如何解决这个问题?

$keylist = array('HHH', 'GGG');

if (in_array($_POST["keys"], $keylist)){ 
    echo "1"; 
    unset($keylist[$_POST["keys"]]);
} else {
    echo "0" ;
}

感谢任何帮助,

偏好者

4 个答案:

答案 0 :(得分:1)

您未设置的$ keylist不是$ _POST

unset($_POST["keys"]);

答案 1 :(得分:1)

你正在使用错误的数组键进行取消设置(你试图取消设置$ keylist [“HHH”],而不是说,例如$ keylist [0]) - 你需要从数组中检索密钥,然后专门取消设置,以便将其从密钥列表中删除。

$index = array_search($_POST["keys"], $keylist);
if($index!==false) { //YES, NOT DOUBLE EQUALS
    unset($keylist[$index));
}

如果$ _POST [“keys”]是一个键数组,则需要使用带有search_value的array_keys。

Array_search文档:http://php.net/manual/en/function.array-search.php

Array_keys文档:http://php.net/manual/en/function.array-keys.php

编辑:添加一个完整的,有效的例子。

<?
$_POST["keys"]="asdjkgldshglsjhgsdlhgsdlghsdlghsdlgh";
$keylist=array("asdjkgldshglsjhgsdlhgsdlghsdlghsdlgh","derp2");
if(in_array($_POST["keys"], $keylist)) {
    $indexToRemove = array_search($_POST["keys"], $keylist);
    echo "1";
    print_r($keylist);
    unset($keylist[$indexToRemove]);
    print_r($keylist);
} else {
    echo "0";
    print_r($keylist);
}
?>

另一个例子,这次检查索引本身以查看它是否为false:

<?
$_POST["keys"]="asdjkgldshglsjhgsdlhgsdlghsdlghsdlgh";
$keylist=array("asdjkgldshglsjhgsdlhgsdlghsdlghsdlgh","derp2");
$indexToRemove = array_search($_POST["keys"], $keylist);
if($indexToRemove!==false) {
    echo "1";
    print_r($keylist);
    unset($keylist[$indexToRemove]);
    print_r($keylist);
} else {
    echo "0";
    print_r($keylist);
}
?>

输出:

1Array ( [0] => asdjkgldshglsjhgsdlhgsdlghsdlghsdlgh [1] => derp2 ) Array ( [1] => derp2 )

我现在意识到我只有一个= $ index!== false check - 你需要两个的原因是因为$ index是0如果你要删除数组的第一个元素。根据PHP文档,

Warning
This function may return Boolean FALSE, but may also return a non-Boolean
value which evaluates to FALSE. Please read the section on Booleans for more 
information. Use the === operator for testing the return value of this function.

答案 2 :(得分:0)

in_array($_POST["keys"], $keylist)检查发布的值$_POST["keys"]是否作为$keylist中的值存在,但unset($keylist[$_POST["keys"]])使用$_POST["keys"]作为$keylist中的键取消某事。

由于in_array()返回true,所以发布的值会出现在数组$keylist中。但是你不能unset($keylist['GGG']),因为没有设置该值。

一个简单的解决方案是使用与键相同的值:

$keylist = array('HHH', 'GGG');
$keylist = array_combine($keylist, $keylist);

有关array_combine()的更多信息。

答案 3 :(得分:0)

你的阵列有钥匙。所以&#34; HHH&#34;在密钥列表中是$ keylist [0]而不是$ keylist [&#39; HHH&#39;]。您无法取消设置它,因为您必须定义数组键而不是数组值。 尝试搜索这样的数组值:

array_search($ _ POST [&#34; keys&#34;],$ keylist)

这将为您返回数组键,如果未找到则返回false。您的完整代码应如下所示:

echo "1"; 
$arrkey = array_search($_POST["keys"], $keylist);
if( $arrkey !== false ){
unset($keylist[$arrkey]);
}

这里是array_search函数的PHP手册:http://php.net/manual/en/function.array-search.php