удалить значение из массива, когда существует несколько, просто удалить один

У меня есть массив, как так:

[a, b, c, d, e]

У меня есть значение, которое я хочу удалить из массива в этом случае a

теперь массив должен выглядеть так:

[b, c, d, e]

это легко, я могу просто сделать:

$del_var = 'a';
if (($key = array_search($del_val, $array)) !== false) {
unset($messages[$key]);
}

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

[a, a, a, b, c, d]

должен дать мне:

[a, a, b, c, d]

как бы я пошел по этому поводу?

0

Решение

Вы могли бы, вероятно, получить один экземпляр ключа, используя array_keys:

if (($key = array_search($del_var, $array)) !== false) {
$keys = array_keys($array, $del_var);
// get the first key;
if (!empty($keys)) {
unset($messages[$keys[0]]);
}
}

Предполагая, что вы ищете a, array_keys должен дать все ключевые показатели a внутри $array, Затем просто получите первый (или в зависимости от того, сколько вы хотите), вы можете сбросить их, используя события.

1

Другие решения

array_keys () возвращает все ключи, которые соответствуют значению поиска (= 2-й параметр). count () подсчитывает результаты array_keys (). Если число больше 1, сбросьте первый элемент с этим значением.

$array = array('a', 'd', 'b', 'c', 'b', 'b', 'd', 'e');

$result = array_keys($array, 'b');
if(count($result) > 1){
unset($array[$result[0]]);
}

Выход:

Array
(
[0] => a
[1] => d
[3] => c
[4] => b
[5] => b
[6] => d
[7] => e
)
0

Вы можете использовать цикл foreach, например так:

$array = ['a', 'a', 'b', 'c', 'd', 'a', 'e'];
$del_var = 'a';

foreach ($array as $key => $value) {
if($value == $del_var){
unset($array[$key]);
break;
}
}

echo "<pre>";
print_r($array);
echo "</pre>";
0

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

$array = ['a', 'a', 'a', 'b', 'c', 'd', 'e'];
$del_var = 'a';
for ($i = 0; $i < count($array); $i++) {
if ($array[$i] === $del_var) {
unset($array[$i]);
break;
}
}

print_r($array);

демонстрация

Это приведет к:

Array
(
[1] => a
[2] => a
[3] => b
[4] => c
[5] => d
[6] => e
)
0
По вопросам рекламы [email protected]