Php array_push() → Как не нажимать, если массив уже содержит значение
Я использую следующий цикл для добавления элементов в массив из моего имени $liste. Я хотел бы знать, возможно ли каким-либо образом не добавлять $value в массив $liste, если значение уже находится в массиве? Надеюсь, я поняла. Заранее благодарю вас.
$liste = array();
foreach($something as $value){
array_push($liste, $value);
}
Ответы
Ответ 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);