0

嘿伙计们,我正在尝试在数组中搜索一个值,然后将其删除。但是我用一个 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); 

这是工作。

4

4 回答 4

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比 快大约 4 倍array_filter

第二:您的脚本的方式是,从数组中删除该项目没有问题。尝试调试来自变量的值$_REQUEST

于 2012-11-15T13:59:29.940 回答
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);
 }
于 2012-11-15T13:46:59.407 回答
0

试试这个(关闭 PHP >= 5.3)

$admin = $_REQUEST['Admin'];

$arr = array_filter($arr, function($key) use($admin) {
    return $key != $admin;
});
于 2012-11-15T13:48:40.450 回答
0

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

试试这个:

$key = array_search(trim($_REQUEST['Admin']), $arr);
于 2012-11-15T13:52:12.317 回答