php-迭代并跳过包含先前值的所有值

php-迭代并跳过包含先前值的所有值,php,arrays,loops,skip,Php,Arrays,Loops,Skip,我想检查两个包含相似元素的数组。如果第二个数组中的元素在第一个数组中包含相同的元素,则保存该元素并忽略其后包含该元素的所有内容。如果第二个数组中的任何元素不是第一个数组的元素,也不包含第一个数组中的任何元素,那么也保存它 基本上是这样的: $array_1 = Array( [0] => car, [1] => bike, [2] => plane, [3] => ship ); $array2 = Array( [0] => tiger_claws, [

我想检查两个包含相似元素的数组。如果第二个数组中的元素在第一个数组中包含相同的元素,则保存该元素并忽略其后包含该元素的所有内容。如果第二个数组中的任何元素不是第一个数组的元素,也不包含第一个数组中的任何元素,那么也保存它

基本上是这样的:

$array_1 = Array(

[0] => car,
[1] => bike,
[2] => plane,
[3] => ship

);


$array2 = Array(

[0] => tiger_claws,
[1] => bike,
[2] => bike_1,
[3] => bike_30,
[4] => bike_clone,
[5] => bike_sold,
[6] => plane,
[7] => plane_3a,
[8] => plane_fly

);
从上面的数组示例中,我想将
虎爪
自行车
平面
放入新的分离数组,该数组将命名为
$new\u数组
。我处理的实际数据是动态的,所以我也需要一种动态的方法

以下是我为实现这一目标所做的努力:

    $count = count($array2);    
    $new_array = array();

    for($i=0; $i<$count; $i++ ) {

      foreach($array_1 as $arr){

               if ($array2[$i] == $arr) {

                  $new_array[] = $arr;

                  if (strpos($array2[$i], $arr)){
                     continue;
                  }                     

               } elseif (strpos($array2[$i], $arr) === false){

                  $new_array[] = $arr;

           }

         }

     }
$count=count($array2);
$new_array=array();
对于($i=0;$i)
此代码循环通过
$array2
并检查:

  • 如果当前数组值在
    $array1
    中(如果是,则忽略它)
  • 如果当前数组值已经在
    $new\u数组中(如果是,则忽略它)
  • 如果当前数组中不存在下划线“

如果是这样,它将被添加到
$new_array

以下是我找到的解决方案。希望有人能从这个答案中受益!如果有更优雅的解决方案,请向我推荐

首先,我们检查
$array2
中是否包含
$array2
中的
$array1
元素,如果存在匹配的元素,则将其收集到新数组中:

$check = array();

foreach(array2 as $arr){

  foreach($array_1 as $arr1){

     if($arr == $arr1) {
        $check[] = $arr;
     }    

  }

}
下一步,使用上面创建的新数组进行过滤,并将所需元素保存到
$new\u数组中

$new_array = array();

foreach(array2 as $arr){

  foreach($check as $chk){

     if($arr == $chk || strpos($arr, $chk) === false) {
        $new_array[] = $arr;
     }    

  }

}
现在
$new\u数组
元素将是:

tiger_claws,
bike,
plane
关于
strpos
。根据我的测试和参考资料,
!strpos($var1,$var2)
不是
strpos($var1,$var2)
的正确对立面。这是测试
strpos
是否为假的正确方法的一个示例:

    if(strpos($var1, $var2) === false) {
      // do your stuff
    }

谢谢你的回答。我刚刚编辑了一点问题。我还想保存
array2
中包含在
array\u 1
中的任何元素。你的代码忽略了
array\u 1
中包含的所有内容。
$new\u array
是一个空白数组,将由经过迭代过滤的数组元素填充,因此它不会被删除不需要检查里面有什么!
$array2
可能包含一个或多个带下划线的元素,而该元素在
$array\u 1
中不会包含任何字符串/元素。我不确定这里如何使用
$array\u 1
,因为“虎爪”和“自行车”都有应在新数组中,但只有后者在数组1中。
$array\u 1
用于筛选
$array2
的元素。如果
$array2
中有任何元素与
$array\u 1
中的任何元素完全匹配,或者如果该元素不包含
$array\u 1
中的任何元素,请将其保存在中到
$new\u array
。但是如果任何
$array2
的元素与
$array2
中的任何元素都不完全匹配,但是它包含它,并且
$array2
中的
$array2
的任何元素都与该
$array2
元素中的
$array1
元素完全匹配,则跳过它(例如:如果有
bike
bike_1
,那么保存
bike
并忽略
bike_1
)。对不起,我试图回答你的问题,但它太复杂了。也许你应该给出一个更好的(现实世界)例子来说明你正在尝试做什么。非常感谢你的尝试…:)我也觉得它很复杂。我实际上想做的是处理wordpress帖子类型的树菜单,其中包含所有分类法、分类法项目、单个帖子和作者姓名。我认为如果我用它作为例子,它要复杂得多,所以我把它缩小到了abpve的例子。。。!
    if(strpos($var1, $var2) === false) {
      // do your stuff
    }