我有一个像这样的数组:
[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 :(得分: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]]);
}
}
假设您正在搜索a
,array_keys
应该会在a
内产生$array
的所有关键索引。然后只需获取第一个(或根据您想要的数量),您可以使用出现的方式取消它们。
答案 1 :(得分:0)
我认为你可以使用for循环,如果你遇到值a
你unset的值并停止循环,那么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);
这将导致:
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>";