我想在回显“1”结果之后从数组中取消设置HTTP Posted键,但是unset似乎不起作用。我该如何解决这个问题?
$keylist = array('HHH', 'GGG');
if (in_array($_POST["keys"], $keylist)){
echo "1";
unset($keylist[$_POST["keys"]]);
} else {
echo "0" ;
}
感谢任何帮助,
偏好者
答案 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