当存在多个时,从数组中删除值只删除一个

时间:2018-06-04 07:27:56

标签: php arrays reduce

我有一个像这样的数组:

[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]

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可能会使用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]]);
    }
}

假设您正在搜索aarray_keys应该会在a内产生$array的所有关键索引。然后只需获取第一个(或根据您想要的数量),您可以使用出现的方式取消它们。

答案 1 :(得分:0)

我认为你可以使用for循环,如果你遇到值aunset的值并停止循环,那么unset只会进行一次。

$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);

Demo

这将导致:

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

答案 2 :(得分:0)

array_keys()返回与搜索值匹配的所有键(=第二个参数)。 count()计算array_keys()的结果。如果count大于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
)

答案 3 :(得分: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>";