Получить только уникальное значение в массиве в зависимости от конкретного случая - PullRequest
0 голосов
/ 23 мая 2019

Я хочу уникальный массив из массива, сравнивая все значения в нижнем или верхнем регистре, чтобы я мог получить идеальный массив. Предположим, у вас есть два значения в массиве, такие как «php developer» и «Php Developer», оба одинаковые, поэтому я нужен возвращаемый массив, который содержит только одно значение и его 'Php Developer'.

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

Мне нужен этот массив следующим образом:

array('Php Developer')

Я хочу получить уникальный массив из массива, сравнивая все значения в нижнем или верхнем регистре, чтобы получить идеальный массив. Предположим, у вас есть два значения в массиве, такие как «php developer» и «Php Developer», оба одинаковые, поэтому я нужен возвращаемый массив, который содержит только одно значение и его 'Php Developer'.

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

Демонстрационная ссылка .

Вы можете использовать эту функцию для фильтрации нечувствительных к регистру значений из массива.

Метод 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т.е. когда строковое представление одинаково, будет использоваться первый элемент.

Источник ссылка .

0 голосов
/ 23 мая 2019

Просто чтобы добавить альтернативу, используя старый добрый foreach и тот факт, что ассоциативные массивы могут иметь только 1 значение на ключ, это просто добавляет все элементы в массив с ключом, установленным в строчную версию ...

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

Если вам не нужен ключ в конце, вы можете использовать ...

$out = array_values($out);
0 голосов
/ 23 мая 2019

array_unique() чувствителен к регистру, поэтому Php Developer и php developer не одно и то же - и поэтому не уникальное - в глазах этой функции.

Для этого вам необходимо преобразовать весь массив в нижний регистр, используя array_map() с обратным вызовом strtolower(), а затем выполнить array_unique() для этого.

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