Подтвердить что ты не робот

Php array_push() → Как не нажимать, если массив уже содержит значение

Я использую следующий цикл для добавления элементов в массив из моего имени $liste. Я хотел бы знать, возможно ли каким-либо образом не добавлять $value в массив $liste, если значение уже находится в массиве? Надеюсь, я поняла. Заранее благодарю вас.

$liste = array();
foreach($something as $value){
     array_push($liste, $value);
}
4b9b3361

Ответ 1

Вы проверяете, есть ли это, используя in_array, прежде чем нажимать.

foreach($something as $value){
    if(!in_array($value, $liste, true)){
        array_push($liste, $value);
    }
}

,true позволяет "строгую проверку". Это сравнивает элементы, используя === вместо ==.

Ответ 2

Два варианта действительно.

Вариант 1: проверьте каждый элемент и не нажимайте, если элемент там. В основном, что вы просите:

foreach($something as $value) {
    if( !in_array($value,$liste)) array_push($liste,$value);
}

Вариант 2: добавьте их в любом случае и разделите дубликаты после:

foreach($something as $value) {
    array_push($liste,$value);
}
$liste = array_unique($liste);

По внешнему виду, однако, вы можете просто искать $liste = array_unique($something);.

Ответ 3

Вы можете просто проверить это условие перед вызовом array_push(). Используйте array_search() и используйте сильное сравнение с false, чтобы увидеть, присутствует ли значение:

foreach( $something as $value ){
    if( array_search( $value, $liste, true ) === false ){
        array_push( $liste, $value );
    }
}

(Кстати: добавьте ,true в array_search, чтобы использовать "строгую проверку". Это будет использовать === для сравнения вместо ==)

Ответ 4

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

function find_uniq( $something ) {
    foreach($something as $value){
         $liste[$value]++;
    }
    return array_keys( $liste );
}

Ответ 5

Сохраняйте логику и улучшайте скорость, сохраняя ее без логики. Просто переписывайте.

$list = array();
foreach ($something as $value) {
  if (!is_object($value) && !is_array($value)) {
    $list[$value] = $value
  }
}
$list = array_values($list);

Ответ 6

Отличные ответы уже присутствуют выше, но если у вас есть несколько array_push() по всему вашему коду, было бы больно писать if (in_array()) заявления каждый раз.

Вот решение, которое сократит ваш код для этого случая: Используйте отдельную функцию.

function arr_inserter($arr,$add){ //to prevent duplicate when inserting
    if(!in_array($add,$arr))
        array_push($arr,$add);
    return $arr;
}

Затем во всех ваших задачах array_push() вы можете вызвать эту функцию выше, например:

$liste = array();
foreach($something as $value){
    $liste = arr_inserter($liste, $value);
}

Если значение $уже присутствует, $liste остается нетронутым.

Если значение $еще не присутствует, оно добавляется к $liste.

Надеюсь, что это поможет.

Ответ 7

Правильный ответ намного проще. Нажмите все, но затем используйте функцию array_unique():

array_push($array, $new_member);
$array = array_unique($array);