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
}