PHP Array_unique

Можно ли удалить вложенные массивы, если элемент массива в позиции 0 этого вложенного массива соответствует последующим элементам?

Например;

Array ( [0] => Array ( [0] => 1234 [1] => XX000 ) 
        [1] => Array ( [0] => 1234 [1] => XX001 ) 
        [2] => Array ( [0] => 1234 [1] => XX002 ) 
      )

Будет скорректирован для вывода;

Array ( [0] => Array ( [0] => 1234 [1] => XX000 ) )

person user1235285    schedule 13.11.2020    source источник
comment
К сожалению нет, но спасибо!   -  person user1235285    schedule 13.11.2020


Ответы (2)


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

Так почему бы не запрограммировать его?

$ORG = [ [ 1234, 'XX000' ],  
         [ 1234, 'XX001' ],  
         [ 1234, 'XX002' ], 
         [19987, 'XX000'] ];

$NEW = [];
$USEDKEYS = [];

foreach ($ORG as $one){
    if (in_array($one[0], $USEDKEYS)) {
        // skip.   
    } else {
        $NEW[] = $one;
        $USEDKEYS[] = $one[0];
    }
}
unset ($USEDKEYS, $ORG);
var_dump ($NEW);
person Erwin Moller    schedule 13.11.2020

Всегда так, я нашел решение после публикации этого ($query является многомерным массивом);

$newArr = array();

foreach ($query as $val) {
    $newArr[$val[0]] = $val;    
}

$query = array_values($newArr);
person user1235285    schedule 13.11.2020
comment
Вы можете принять свой собственный ответ, который поможет другим, кто прочитает это в будущем. - person Mawg says reinstate Monica; 13.11.2020
comment
Очень похоже на этот метод будет $query = array_values(array_column($query, null, 0));. - person Nigel Ren; 13.11.2020
comment
Это работает, но вы должны знать, что ваши ключи теперь берутся из внутреннего массива-значения[0]. Таким образом, они могут быть 2, 54, 4, 99 и т. д. (в отличие от 0, 1, 2, 3 и т. д.). Это может не быть проблемой в вашей ситуации, но об этом следует подумать. - person Erwin Moller; 13.11.2020