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問題は、変数から得られる値に関連していると思います。
2つの質問を示すために、次のテストを行いました。

//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>';

最初: hasを使用すると、array_searchよりも約 4 倍高速になりarray_filterます。

2番目:スクリプトの方法では、アイテムは問題なく配列から削除されます。変数からの値をデバッグしてみてください$_REQUEST

于 2012-11-15T13:59:29.940 に答える
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

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

手動$_REQUEST['Admin']で「HAUGMA1」に設定すると動作します。文字列の先頭または末尾に空白が含まれていませんか?

これを試してください:

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