PHP - 在具有已定义值的项之后删除数组中的所有项

时间:2017-01-18 14:18:06

标签: php arrays filter

我试图从数组中删除具有特定值的所有项目,但仅当数组中出现该特定值时才会删除。例如:

$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中最后一次出现任何值之后出现的值

2 个答案:

答案 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"
}