2014-03-05 4 views
1

에서 특정 요소 나는이 배열이 : 그래서설정 해제 배열 PHP

Array 
(
    [0] => Array 
     (
      [nid] => 1 
      [language] => EN 
      [uid] => 1 
      [tid] => page 
      [title] => Welcome 
      [body] => 
Comming Soon. 


      [date_post] => 2014-02-18 08:27:56 
      [enable] => 1 
     ) 

    [1] => Array 
     (
      [nid] => 2 
      [language] => EN 
      [uid] => 1 
      [tid] => page 
      [title] => Our Stuff 
      [body] => 
Comming Soon. 

      [date_post] => 2014-02-18 08:27:56 
      [enable] => 1 
     ) 

    [2] => Array 
     (
      [nid] => 3 
      [language] => EN 
      [uid] => 1 
      [tid] => page 
      [title] => Partners 
      [body] => 
Comming Soon. 


      [date_post] => 2014-02-18 08:27:56 
      [enable] => 1 
     ) 

그리고 ... 내가 예를 들어 제목 Partners을 얼마나 요소를 설정 해제하고 싶으면 무엇을, 그래서 시도 이 :

unset($pages[array_search('Partners',$pages)]); 

하지만 첫 번째 요소가 테이블에서 제거되므로 특정 요소를 어떻게 해제 할 수 있습니까?

감사

답변

4

array_search()은 주요 배열의 요소를 검색한다. 이러한 요소 자체는 배열이므로 false을 반환합니다. 당신도 배열 함수 또는 루프 각각의 하위 배열을 통해 반복해야합니다

foreach($array as $key => $value) { 
    if($value['title'] == 'Partners') { 
     unset($array[$key]); 
    } 
} 
+1

그리고 당신은 또한 반환 값을 확인해야합니다 않습니다. –

+0

@SteveBuzonas : 밖으로 향했다. – AbraCadaver

+0

주의 : 마지막 편집이 작동하지 않습니다! 내 대답보기! – steffen

4

그것은 왜냐하면 문자열 '파트너'에 대한 array_search 검색 배열. 그러나 배열에 배열이 3 개만 있기 때문에 항목이 없습니다. array_search0으로 평가되는 false이됩니다. 첫 번째 키가 제거 된 것입니다.

각 배열 (foreach ($myarray as $array) { ... }) 내에서 검색해야합니다.

$value = array_search(...); 
if ($value !== false) { 
    // do unset 
} 

솔루션 array_filter와 : : 그것은 왜 예를 작동하지 않는 일을하고 설명하고이 경우이 응답을 더 도움이 될 것

// Remove all arrays having 'title' => 'Partners' 
$arr = array_filter($arr, function($e) { return $e['title'] != 'Partners'; }); 

// Remove all arrays containing a value 'Partners' 
$arr = array_filter($arr, function($e) { return array_search('Partners', $e) === false; });