5

いくつかの解決策を見つけましたが、どれを使用するかを決めることができません。array_unique()大文字と小文字を区別しない配列でphpの関数を使用するための最もコンパクトで効果的なソリューションは何ですか?

例:

$input = array('green', 'Green', 'blue', 'yellow', 'blue');
$result = array_unique($input);
print_r($result);

結果:

Array ( [0] => green [1] => Green [2] => blue [3] => yellow )

重複を削除するにはどうすればよいgreenですか?どちらを削除するかについては、大文字との重複が正しいと想定しています。

PHP例:削除し続けるphp

または、大文字が多いのでPHP削除PhpPHP続けます。

したがって、結果は次のようになります

Array ( [0] => Green [1] => blue [2] => yellow )

大文字の緑が保持されていることに注意してください。

4

5 に答える 5

14

これは機能しますか?

$r = array_intersect_key($input, array_unique(array_map('strtolower', $input)));

保持する特定のケースは気にしませんが、仕事をします。asort($input);代わりに、交差の前に呼び出して、大文字の値を保持することもできます(IDEOne.comのデモ)。

于 2011-06-05T02:03:24.100 に答える
3

PHP 5.3.0を使用できる場合は、探していることを実行する関数を次に示します。

<?php
function array_unique_case($array) {
    sort($array);
    $tmp = array();
    $callback = function ($a) use (&$tmp) {
        if (in_array(strtolower($a), $tmp))
            return false;
        $tmp[] = strtolower($a);
        return true;
    };
    return array_filter($array, $callback);
}

$input = array(
    'green', 'Green', 
    'php', 'Php', 'PHP', 
    'blue', 'yellow', 'blue'
);
print_r(array_unique_case($input));
?>

出力:

Array
(
    [0] => Green
    [1] => PHP
    [3] => blue
    [7] => yellow
)
于 2011-06-05T03:06:03.940 に答える
1
function count_uc($str) {
  preg_match_all('/[A-Z]/', $str, $matches);
  return count($matches[0]);
}

$input = array(
    'green', 'Green', 'yelLOW', 
    'php', 'Php', 'PHP', 'gREEN', 
    'blue', 'yellow', 'bLue', 'GREen'
);

$input=array_unique($input);
$keys=array_flip($input);
array_multisort(array_map("strtolower",$input),array_map("count_uc",$input),$keys);
$keys=array_flip(array_change_key_case($keys));
$output=array_intersect_key($input,$keys);
print_r( $output );

戻ります:

Array
(
    [2] => yelLOW
    [5] => PHP
    [6] => gREEN
    [9] => bLue
)
于 2011-06-05T03:52:37.323 に答える
0

最初にすべての値を小文字にしてから、array_uniqueを起動する必要があります。これで完了です。

于 2011-06-05T01:56:14.647 に答える
0

最初にデータを送信するstrtoupper()strtolower()、ケースの一貫性を保つために、データを正規化します。次に、array_unique()を使用します。

$normalized = array_map($input, 'strtolower');
$result = array_unique($normalized);
$result = array_map($result, 'ucwords');
print_r($result);
于 2011-06-05T01:56:18.643 に答える