检查另一个嵌套数组中是否存在数组元素,并删除不存在的元素

问题描述 投票:0回答:2

我有一个包含一些值的数组,我需要检查某些值是否不在这个数组中。

这是第一个名为“$arr_cls”的数组。

Array ( 
  [0] => Array ( 
    [0] => Paris SG 
    [1] => Brest 
    [2] => Monaco 
    [3] => Nizza 
    [4] => Lilla 
    [5] => Lens )

  [1] => Array ( 
    [0] => Marsiglia 
    [1] => Rennes 
    [2] => Reims 
    [3] => Lione 
    [4] => Tolosa 
    [5] => Strasburgo ) 

  [2] => Array ( 
    [0] => Le Havre 
    [1] => Montpellier 
    [2] => Lorient 
    [3] => Nantes 
    [4] => Metz 
    [5] => Clermont ) 
)

第二个数组:名称为“$part_t2”

Array ( 
  [0] => Sturm Graz 
  [1] => Rennes 
  [2] => Sturm Graz 
  [3] => Reims 
  [4] => Tolosa 
  [5] => Le Havre 
  [6] => Paris SG 
  [7] => Lione 
  [8] => Clermont 
  [9] => Montpellier 
  [10] => Lorient 
  [11] => Strasburgo )

我需要从第二个数组中删除第一个数组中不存在的值,在本例中为 value[0] 和 value[2] (Sturm Graz)。

我尝试了这个但不起作用。

$part_t2_2=array();
foreach($part_t2 as $value){
    
    if (in_array($value,$arr_cls[0],true) or in_array($value,$arr_cls[1],true) or in_array($value,$arr_cls[2],true)){
        $part_t2_2[]=$value;
    }
    
}
php arrays if-statement foreach strpos
2个回答
0
投票

你是这个意思吗? 您还可以使用 count 和 for 函数

$arra2=$arr_cls;
$arra1=$part_t2_2;
$final_array=null;
foreach($arra2 as $no => $arra22)
{
    foreach($arra22 as $el22)
    {
        foreach($arra1 as $el1)
        {
             if($el22===$el1)
             {
                 $final_array[]=$el22;
             }
        }
    }
}
var_dump($final_array);

0
投票

其中一种方法是首先展平嵌套数组,然后使用 in_array 和循环来完成这项工作

我们可以使用这个函数来展平嵌套数组

function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

然后循环它,使用 in_array 检查并构建 $part_t2_2

foreach($part_t2 as $value){
   if (in_array($value, $arr_cls_new)) { 
        array_push($part_t2_2, $value);
   }
}

所以,整个完整的代码将是

<?php

function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

$array1=array(
   "Paris SG", 
   "Brest", 
   "Monaco", 
   "Nizza", 
   "Lilla", 
   "Lens");
 
$array2=array(
   "Marsiglia", 
   "Rennes", 
   "Reims", 
   "Lione", 
   "Tolosa", 
   "Strasburgo");

$array3=array(
   "Le Havre", 
   "Montpellier", 
   "Lorient", 
   "Nantes", 
   "Metz", 
   "Clermont");

$arr_cls=array();

// build arr_cls below
array_push($arr_cls, $array1, $array2, $array3); 

// flatten array now
$arr_cls_new=flatten($arr_cls); 

//build part_t2 below

$part_t2=array(
   "Sturm Graz", 
   "Rennes", 
   "Sturm Graz", 
   "Reims", 
   "Tolosa", 
   "Le Havre", 
   "Paris SG", 
   "Lione", 
   "Clermont", 
   "Montpellier", 
   "Lorient", 
   "Strasburgo");

//declare a blank array

$part_t2_2=array();

// loop over it and only if an element in part_t2 exists in arr_cls_new (flattend array), put into part_t2_2

foreach($part_t2 as $value){
   if (in_array($value, $arr_cls_new)) { 
        array_push($part_t2_2, $value);
   }
}

var_dump($part_t2_2);

参见演示

© www.soinside.com 2019 - 2024. All rights reserved.