【问题标题】:PHP - Compare two array and remove both item in a specific index if either of the array have empty valuePHP - 如果数组中的任何一个具有空值,则比较两个数组并删除特定索引中的两项
【发布时间】:2012-03-19 04:34:57
【问题描述】:

参考下面的2个数组:

$bar_arr = 

Array
(
    Array
    (
        [bar] => bar01.jpg
        [position] => 1
    )
    Array
    (
        [bar] => bar02.jpg
        [position] => 2
    )
    Array
    (
        [bar] => bar03.jpg
        [position] => 3
    )
)

$banner_arr = 

Array
(
    Array
    (
        [banner] => 
        [position] => 1
    )
    Array
    (
        [banner] => banner02.jpg
        [position] => 2
    )
    Array
    (
        [banner] => banner03.jpg
        [position] => 3
    )
)

$banner_arr[0][banner] 没有价值,所以我想删除这个索引。同时$bar_arr[0][bar]也将被删除,我想这样结束:

$bar_arr = 

Array
(
    Array
    (
        [bar] => bar02.jpg
        [position] => 2
    )
    Array
    (
        [bar] => bar03.jpg
        [position] => 3
    )
)

$banner_arr = 

Array
(
    Array
    (
        [banner] => banner02.jpg
        [position] => 2
    )
    Array
    (
        [banner] => banner03.jpg
        [position] => 3
    )
)

我的问题是如何比较这两个数组并在数组中的任何一个具有空值时删除特定索引中的两项。

谢谢

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    如果您只是检查banner 的值并且假设两个数组的顺序相同,那么这相当简单(您可能需要先复制banner_arr ...不确定):

    foreach ($banner_arr as $key => $banner) {
        if (empty($banner['banner'])) {
            unset($banner_arr[$key]);
            unset($bar_arr[$key]);
        }
    }
    

    更可能的是,不能依赖数组的顺序。在这种情况下,只需使用一个额外的位置数组并跟踪所有需要删除的位置,然后取消设置:

    $positions = array();
    foreach ($banner_arr as $key => $banner) {
        if (empty($banner['banner'])) {
            $positions[] = $banner['position'];
            unset($banner_arr[$key]);
        }
    }
    

    然后通过$bar_arr搜索对应的位置:

    foreach ($bar_arr as $key => $bar) {
        if (in_array($bar['position'], $positions)) {
            unset($bar_arr[$key]);
        }
    }
    

    【讨论】:

      【解决方案2】:

      我假设两个数组的长度相同,并且唯一可能的缺失值在 ['bar'] 或 ['banner'] 中。

      基本上我只是循环遍历数组并将有效值存储在新数组中;

      $new_bar_arr = array();
      $new_banner_arr = array();
      
      $count = count($banner_arr);
      $index = 0;
      while($index < $count){
          if(!empty($bar_arr[$index]['bar']) && !empty($banner_arr[$index]['banner'])){
              $new_bar_arr[] = $bar_arr[$index];
              $new_banner_arr[] = $banner_arr[$index];
          }
          $index++;
      }
      

      【讨论】:

        【解决方案3】:

        假设您的计数按照您的建议排列:

        $newArray = array_map( NULL, $banner_arr, $bar_arr );
        
         foreach( $newArray as $key => $array ){   
           foreach( $array as $arr ){
             if( $arr === NULL ){
               unset( $newArray[$key] );
             }
           }
         }
        

        即使没有,我也只是创建一个新函数并仍然使用数组映射。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 2012-01-31
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 2023-03-09
          • 2022-01-09
          相关资源
          最近更新 更多