как проверить многомерный массив на дублированное значение

0

У меня есть этот массив, и я не хочу удалять повторяющиеся значения. Я хочу проверить, есть ли дубликаты в первом значении или нет

([0] => 1500, [0] => 1111, [0] => 1500)

если есть, тогда верните true else return false, как это сделать?

Array
(
    [0] => Array
        (
            [0] => 1500
            [1] => first
            [2] => 
            [3] => 
            [4] => 50
            [5] => 
            [6] => 
        )

    [1] => Array
        (
            [0] => 1111
            [1] => second
            [2] => 
            [3] => 
            [4] => 10
            [5] => 
            [6] => 
        )

    [2] => Array
        (
            [0] => 1500
            [1] => third
            [2] => 
            [3] => 
            [4] => 100
            [5] => 
            [6] => 
        )



)
  • 0
    Что ты пытался сделать?
  • 0
    И, используя «дубликаты в первом значении», вы можете уточнить, что вы хотите знать, «есть ли несколько подмассивов, имеющих одинаковое значение для [0] »?
Показать ещё 4 комментария
Теги:
arrays
for-loop

1 ответ

1
Лучший ответ

Если у вас есть PHP 5. 5+, функция array_column() упрощает извлечение первого "столбца" подмассивов и кормит результирующий массив массивом_count_values array_count_values(), который создает массив значений типа [1500] => 2, [1111] => 1, из которого вы можете легко вывести, которые имеют > 1.

Это будет выглядеть так:

// PHP 5.5+ only...
// Gets counts of each first sub-array value
$counts = array_count_values(array_column($input_multidimensional_array, 0));
// Test that the array key has > 1

// To check a specific one for duplicates:
if (isset($counts['1500']) && $counts['1500'] > 1) {
   // Yes, it has duplicates.
}

Но... Поскольку у вас нет PHP 5. 5+, вам придется использовать какую-то форму цикла.

$temp = array();
foreach ($input_multidimensional_array as $sub_array) {
  // A temporary array holds all the first elements
  $temp[] = $sub_array[0];
}
// Count them up
$counts = array_count_values($temp);

// Then use the same process to check for multiples/duplicates:
if (isset($counts['1500']) && $counts['1500'] > 1) {
   // Yes, it has duplicates.
}

В любом из этих случаев вы также можете использовать array_filter() только для возврата массива из $counts с кратными значениями.

// Filter to only those with > 1 into $only_duplicates
$only_duplicates = array_filter($counts, function($v) {
  return $v > 1;
});
// To further reduce this only to the _values_ themselves like 1500, 1111
// use array_keys:
$only_duplicates = array_keys($only_duplicates);
// is now array('1500')
  • 0
    Я НЕ ЗНАЮ, ЧТО ЭТО ЗНАЧЕНИЕ $ рассчитывает ['1500'], ПОТОМУ ЧТО ЭТО ДИНАМИЧЕСКИЙ Массив
  • 0
    Это нормально. Если вы просто хотите узнать, какие из них являются дубликатами, не запрашивая конкретные, пропустите if (isset($counts....)) array_filter($counts....) if (isset($counts....)) и просто используйте array_filter($counts....) в конце.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню