2012-03-19 5 views
3

は、以下の2列を参照してくださいしている場合、特定のインデックスの両方の項目を削除します。PHP - 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 
    ) 
) 

私の質問は、この2つの配列を比較して、配列のいずれかが空の値を持っている場合、特定のインデックスの両方の項目を削除する方法です。

おかげ

答えて

1

あなただけのバナーの値をチェックしていると、あなたは二つの配列が同じよう命じていると仮定した場合、これはあなたが最初のbanner_arrのコピーを作成する必要があるかもしれません(非常に簡単です...ではないことを確認):

さらに、配列の順序は信頼できません。この場合、単に位置の追加の配列を使用して除去する必要があるすべての位置を追跡し、未設定のものである:

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

I:

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

その後、対応する位置の$ bar_arrを検索両方の配列が同じ長さで、唯一の欠損値が['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]); 
    } 
    } 
} 

そうでない場合でも、私はちょうど新しい関数を作成し、まだ配列マップを使用すると思います。

関連する問題