区分大小写仅获取数组中的唯一值

时间:2019-05-23 06:02:38

标签: php arrays unique

我想通过比较所有值是否为小写或大写来从数组中获得唯一的数组,这样我就可以获得完美的array.supple.supple假设您在数组中有两个值,例如'php developer'和'Php Developer',两者相同,所以我需要返回仅包含一个值及其“ Php Developer”的数组。

array('php developer','Php Developer');

我需要这个数组如下:

array('Php Developer')

我想通过比较所有值是否为小写或大写来从数组中获得唯一的数组,这样我就可以获得完美的array.supple.supple假设您在数组中有两个值,例如'php developer'和'Php Developer',两者相同,所以我需要返回仅包含一个值及其“ Php Developer”的数组。

3 个答案:

答案 0 :(得分:1)

array_unique()是区分大小写的,因此在该功能看来,Php Developerphp developer是不相同的,因此也不是唯一的。

因此,您应该使用带有array_map()回调的strtolower()将整个数组转换为小写,然后在其上执行array_unique()

$array = array_unique(array_map('strtolower', array('php developer','Php Developer')));
print_r($array); // Outputs 'php developer'

答案 1 :(得分:1)

Demo Link

您可以使用此功能从数组中过滤不区分大小写的值。

方法1:

function array_iunique($array) {  // Case insensitive
    // lower all array cases of array values
    $lowered = array_map('strtolower', $array); 
    // will fetch unique array first means php developer
    // now array_intersect_key will return first match value for php developer
    return array_intersect_key($array, array_unique($lowered));
} 

方法2:比上述方法快

function array_iunique($array) { 
    return array_keys(array_flip(array_map('strtolower',$array))); 
}

方法3:更快

function array_iunique($array) { 
    return array_flip(array_flip(array_map('strtolower',$array))); 
} 

array_map —将回调应用于给定数组的元素
array_intersect_key —使用键进行比较来计算数组的交集
array_flip —交换数组中所有键及其关联的值
array_merge-合并一个或多个数组
array_keys —返回数组的所有键或键的子集

  

请注意,密钥已保留。如果多个元素在下比较相等   给定的sort_flags,然后是第一个等于的键和值   元素将保留。

     

注意:当且仅当(string) $elem1 === (string) $elem2,即当字符串表示为   同样,将使用第一个元素。

来源link

答案 2 :(得分:0)

只需使用旧的foreach添加一个替代项,并且关联数组每个键只能有1个值,这只是将所有项添加到键设置为小写版本的数组中。 ..

$data = array('php developer','Php Developer');
$out = [];
foreach ( $data as $item )  {
    $out[strtolower($item)] = $item;
}
print_r($out);

如果最后不需要钥匙,可以使用...

$out = array_values($out);