我试图从数组中删除具有特定值的所有项目,但仅当数组中出现该特定值时才会删除。例如:
$breakers = ('a','b','c');
$array1 = ('z','z','a','b','c','z','z''z');
$array2 = ('z','b','z','z','z''z');
$array3 = ('z','c','z','a','z','z');
$array4 = ('z','z','z');
我想删除所有出现的' z'在' a'' b'的最后一个实例之后或者' c'但只有在' a,' b'或者' c'在数组中出现,因此输出将是:
$array1 = ('z','z','a','b','c');
$array2 = ('z','b');
$array3 = ('z','c','z','a');
$array4 = ('z','z','z');
我已经能够检查数组中是否出现$断路器(例如):
if (count((array_intersect($breakers, $array1)))>0) { ... }
但我迷失了如何说"删除所有' z'在$ breakers中最后一次出现任何值之后出现的值
答案 0 :(得分:0)
此代码应该可以使用
<?php
$breakers = ('1','2','3');
$array1 = ('z','z','a','b','c','z','z''z');
$lengthb = count($breakers);
$match = 0;
$count = 0;
flag=0;
foreach($array1 as $val)
{
if($val == $lenghtb[$match])
{
$match++;
}
if($match == $lengthb)
{
flag = 1;
break;
}
$count++;
}
if(flag == 1)
{
array_slice($array1,0,$count+1,true);
}
?>
答案 1 :(得分:0)
带有标志的用户array_filter,您应该在每个过滤器之前重置标志。
<?php
$breakers = array('a','b','c');
$array1 = array('z','z','a','b','c','z','z','z');
$flag = false;
var_dump(array_filter($array1, function($v)use(&$flag, $breakers){
if($flag)
return false;
if(in_array($v, $breakers))
{
$flag = true;
return false;
}
return true;
}));
结果:
ei@localhost:~$ php test.php
array(2) {
[0]=>
string(1) "z"
[1]=>
string(1) "z"
}