2012-03-19 3 views
3

은 아래 두 배열을 참조 빈 값이있는 경우 특정 인덱스에 모두 항목을 제거 :PHP - 두 개의 배열을 비교하고 배열의 하나가

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

내 질문이 두 배열을 비교하고 배열 중 하나가 빈 값이있는 경우 특정 인덱스에 모두 항목을 제거하는 방법이다.

감사

그냥 배너의 값을 확인하고 당신이 두 배열이 동일하게 정렬되는 것을 가정하면

답변

1

,이 (당신은 확실하지 ... 첫 banner_arr의 사본을해야 할 수도 있습니다 매우 간단하다) :

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

그래도 배열의 순서는 신뢰할 수 없습니다. 이 경우, 단지 위치의 추가 배열을 사용하여 제거 할 필요가있는 모든 위치를 추적하고, 설정되지 않은 경우 :

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]); 
    } 
    } 
} 

을가, 난 그냥 새로운 기능을 여전히 배열지도를 사용하는 거라고하지 않는 경우에도 마찬가지입니다.

관련 문제