使用PHP变量搜索数组中的值,然后将其删除

使用PHP变量搜索数组中的值,然后将其删除,php,arrays,Php,Arrays,嘿,伙计们,我正试图在数组中搜索一个值,然后将其删除。但是我用一个php变量搜索,这似乎就是问题所在。这就是我到目前为止所做的: if(isset($_REQUEST['Admin'])){ $arr = array('HAUGMA1', 'sdasd', 'dasdasda', 'sadasd'); $key=array_search($_REQUEST['Admin'],$arr); if($key!==false) unset($arr[$key]

嘿,伙计们,我正试图在数组中搜索一个值,然后将其删除。但是我用一个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);
}
$\u请求
检索值
HAUGMA1
,但当我打印出数组时,它没有从数组中删除
HAUGMA1
。我做错了什么?当我使用这个时:

$key=array_search('HAUGMA1',$arr); 

它正在工作。

数组搜索区分大小写。使用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);
 }
试试这个(闭包PHP>=5.3)


当我手动将
$\u REQUEST['Admin']
设置为“HAUGMA1”时,它正在工作。您确定字符串的开头或结尾没有空格吗

试试这个:

$key = array_search(trim($_REQUEST['Admin']), $arr);

我认为问题与来自
$\u请求
变量的值有关。
我做了以下测试,以显示两个问题:

//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>';
//数组定义
$arr=array('HAUGMA1','sdasd','dasda','sadasd');
//搜寻
$admin='dasda';
/*第一个样本*/
$time=microtime();
$arr=数组\过滤器($arr,函数($key)使用($admin){
返回$key!=$admin;
});
印刷费($arr);
回显“
执行时间:”(microtime()-$time)。“
”; /*第二个样本*/ $time=microtime(); $key=array\u search($admin,$arr); 如果($key!==false) 未设置($arr[$key]); 印刷费($arr); 回显“
执行时间:”(microtime()-$time)。“
”;
首先:使用
数组搜索
数组过滤器
快约4倍


Second:按照脚本的方式,从数组中删除该项不会出现问题。尝试调试来自变量
$\u REQUEST

的值。回显时,$\u REQUEST['Admin']的实际值是多少?如果
错误,则使用了第二个
。如果($key!=FALSE)
@AbhishekBhatia不符合手册要求,则应为
@科学家的值是
HAUGMA1
nope not wokring结果是:
Array([0]=>HAUGMA1[1]=>SDASD[2]=>ETC)
你能变量转储($\u请求['Admin'])并告诉我们结果吗?结果是:
string(9)“HAUGMA1”
在Wayne Whitty的回复中,他使用了
strotupper
trim
,OP说它仍然不起作用。一个
var\u dump
$\u请求['Admin']
给了我
字符串(9)“HAUGMA1”
这就是问题所在。使用“trim”删除
$\u请求
变量中的额外空格:
array\u搜索(trim($\u请求['Admin']),$arr)
//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>';