嘿伙计们我试图在数组中搜索一个值,然后删除它。但我正在搜索一个PHP变量,这似乎是问题。所以这就是我到目前为止所做的:
if(isset($_REQUEST['Admin'])){
$arr = array('HAUGMA1', 'sdasd', 'dasdasda', 'sadasd');
$key=array_search($_REQUEST['Admin'],$arr);
if($key!==false)
unset($arr[$key]);
print_r($arr);
}
$_REQUEST
检索值HAUGMA1
但是当我打印出数组时,它没有从中移除HAUGMA1
。我究竟做错了什么?当我使用它时:
$key=array_search('HAUGMA1',$arr);
它正在发挥作用。
答案 0 :(得分:1)
我认为问题与来自$_REQUEST
变量的价值有关
我做了以下测试以显示两个问题:
//Array definition
$arr = array('HAUGMA1', 'sdasd', 'dasdasda', 'sadasd');
//Search
$admin = 'dasdasda';
/* First sample */
$time = microtime();
$arr = array_filter($arr, function($key) use($admin) {
return $key != $admin;
});
print_r($arr);
echo '<br>Execution time: '.(microtime()-$time).'<br>';
/* Second sample */
$time = microtime();
$key = array_search($admin, $arr);
if($key !== false)
unset($arr[$key]);
print_r($arr);
echo '<br>Execution time: '.(microtime()-$time).'<br>';
首先:使用array_search
的速度比array_filter
快大约4倍。
第二:您的脚本的方式,该项目从数组中删除没有问题。尝试调试来自变量$_REQUEST
答案 1 :(得分:0)
array_search区分大小写。使用strtoupper和trim以使传入变量符合数组中的值。 trim()将摆脱尾随空格和其他不需要的字符。
if(isset($_REQUEST['Admin'])){
$arr = array('HAUGMA1', 'SDASD', 'ETC');
$key = array_search(strtoupper(trim($_REQUEST['Admin'])), $arr);
if($key !== false){
unset($arr[$key]);
}
print_r($arr);
}
答案 2 :(得分:0)
试试这个(关闭PHP&gt; = 5.3)
$admin = $_REQUEST['Admin'];
$arr = array_filter($arr, function($key) use($admin) {
return $key != $admin;
});
答案 3 :(得分:0)
当我手动将$_REQUEST['Admin']
设置为“HAUGMA1”时,它正在运行。你确定字符串的开头或结尾没有空格吗?
试试这个:
$key = array_search(trim($_REQUEST['Admin']), $arr);