PHP-比较两个数组,如果其中一个数组有空值,则删除指定索引中的两个项目。

3

请参考下面的两个数组:

$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
    )
)

我的问题是如何比较这两个数组,并在其中一个数组为空值时删除特定索引中的两个项目。
谢谢。
3个回答

1

如果你只是想检查横幅的值,并且假设这两个数组的顺序相同,那么这就很简单了(你可能需要先复制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]);
    }
}

1
我假设两个数组长度相同,唯一可能缺失的值是在 ['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++;
}

0

假设您的计数与您所建议的一样:

$newArray = array_map( NULL, $banner_arr, $bar_arr );

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

即使不行,我也会新建一个函数并仍然使用数组映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接