2010-07-23 2 views
0

Хей, ребята, у меня есть массив содержит эти данныеУдаление повторяющихся элементов выключения с многомерного массива в PHP

Array 
    (
    [id] => Array 
     (
      [0] => 1 
      [1] => 10 
      [2] => 4 
     ) 

    [age] => Array 
     (
      [0] => 1 
      [1] => 1 
      [2] => 2 
     ) 
) 

Теперь я хочу, чтобы удалить дубликаты из [ «возраст»] и оставить первый в тактичность.

Так заносить бы

Array 
    (
    [id] => Array 
     (
      [0] => 1 
      [2] => 4 
     ) 

    [age] => Array 
     (
      [0] => 1 
      [2] => 2 
     ) 
) 

Есть идеи? Или есть функция, уже существующая для этого?

+0

Если значение уже существует в $ массиве [ 'возраст'] Вы хотите удалить его, и в то же самое время удалите запись с тем же ключом (как тот, который был удален) из $ array ['id'], правильно? Это немного пропало в теле вопроса. – Gordon

+0

Правильный Гордон. – dotty

+1

Почему ключ '1' от 'id' отсутствует в обратном? значение 10 не было ошибкой. – joshtronic

ответ

1

Как сказал Гордон, вам нужна пользовательская функция для установления отношений, но вы можете использовать http://php.net/manual/en/function.array-unique.php?

Не было бы лучше иметь ключи массива возраста соответствующие значения массива id?

+0

Блестящая идея, тогда я мог бы просто взять первый предмет и не беспокоиться об обманах! – dotty

0
<?php 

$array = array(
    'id' => array(0 => 1, 1 => 10, 3 => 4), 
    'age' => array(0 => 1, 1 => 1, 2 => 2) 
); 

array_walk($array, 'dupe_killer'); 

print_r($array); 

function dupe_killer(&$value, $key) 
{ 
    $value = array_unique($value); 
} 

?> 
+0

array_walk применяет определяемую пользователем функцию funcname к каждому элементу массива $ array. в то время как здесь нет необходимости. – Bakhtiyor

+0

Не работает. Удаляет обманки из $ ids, но затем не удаляет один и тот же элемент из $ возрастов – dotty

+0

array_unique() не является рекурсивным, как бы применить его к каждому элементу? – joshtronic

0

Вы могли бы попробовать это

$array = array('id' => array(1,10,4), 'age'=>array(1,1,2)); 
$age_array = array(); 
foreach ($array['age'] as $key => $val) { 
    if (in_array($val, $age_array)) 
    unset($array['id'][$key], $array['age'][$key]); 
    $age_array[] = $val; 
} 
print_r($array); 

это возвращает Array ([id] => Array ([0] => 1 [2] => 4) [age] => Array ([0] => 1 [2] => 2))

С уважением Луки