2013-11-03 8 views
0

연관 배열을 검색하고 값을 찾으면 배열의 해당 부분을 삭제하십시오.연관 배열 부분 제거

Array 
(
    [0] => Array 
     (
      [id] => 2918 
      [schoolname] => Albany Medical College 
      [AppService] => 16295C0C51D8318C2 
     ) 

    [1] => Array 
     (
      [id] => 2919 
      [schoolname] => Albert Einstein College of Medicine 
      [AppService] => 16295C0C51D8318C2 
     ) 

    [2] => Array 
     (
      [id] => 2920 
      [schoolname] => Baylor College of Medicine 
      [AppService] => 16295C0C51D8318C2 
     ) 
} 

는 내가하고 싶은 것은 AppService의 값 16295C0C51D8318C2을 찾은 다음 배열의 일부를 삭제할 수 있습니다 : 여기

내 배열의 샘플입니다. 예를 들어, 위의 배열에서 해당 코드를 실행하는 경우 로직이 해당 배열의 모든 항목과 일치하기 때문에 전체 배열이 비어 있습니다. 여기

내 코드는 지금까지 있습니다 :

  foreach($this->schs_raw as $object) { 
       if($object['AppService'] == "16295C0C51D8318C2") { 
        unset($object); 
       } 
     } 
+0

foreach 루프의 로컬 변수를 설정 해제하려고합니다. 하지만 원래 배열 내용을 수정하려고했습니다. – mario

+0

복사본을 사용하지 않으려면 참조하십시오. –

답변

2

이 같은 시도 : 결국

foreach ($this->schs_raw as &$object) { 
    if($object['AppService'] == "16295C0C51D8318C2") { 
     unset($object); 
    } 
} 

:

foreach ($this->schs_raw as $k => $object) { 
    if($object['AppService'] == "16295C0C51D8318C2") { 
     unset($this->schs_raw[$k]); 
    } 
} 
+0

감사합니다. 그랬어. 사용 된 & 기호는 무엇입니까? 나는 전에 그것을 본 적이 없다. –

+1

@ 리차드 : http://php.net/manual/en/language.references.php –

+0

http://php.net/manual/en/language.references.pass.php – speccode

0

왜 새로운 배열을 생성하지? 일치하는 항목이 없으면 새 배열에 색인을 추가하십시오 ... 발견되면 추가하지 마십시오. 새 배열에는 원하는 데이터 만 포함됩니다.

+0

배열이 너무 많이 사용된다고 상상해보십시오. 시간이 응용 프로그램에서, 그리고 로직이 구현되어야합니다,이 배열은 수정 될 것입니다 –

2

이 시도 :

foreach($this->schs_raw as $key=>$object) { 
    if($object['AppService'] == "16295C0C51D8318C2") {  
    unset($this->schs_raw[$key]); // unset the array using appropriate index  
    break; // to exit loop after removing first item 
    } 
} 
-1

뭔가 도움이 될 것입니다?

<?php 

$array = [ 
    0 => [ 
     'id'   => 2918, 
     'schoolname' => 'Albany Medical College', 
     'AppService' => '16295C0C51D8318C2' 
    ], 
    1 => [ 
     'id'   => 2919, 
     'schoolname' => 'Albert Einstein College of Medicine', 
     'AppService' => '16295C0C51D8318C2' 
    ], 
    2 => [ 
     'id'   => 2920, 
     'schoolname' => 'Baylor College of Medicine', 
     'AppService' => '16295C0C51D8318C2' 
    ] 
]; 

foreach ($array as $key => $value) { 
    if ($value['AppService'] === "16295C0C51D8318C2") { 
     unset($array[$key]); 
     break; 
    } 
} 

echo '<pre>'; 
print_r($array); 
+1

정확히 OP에 대해 작동하지 않는 질문에 게시 된 것과 같습니다. –

+0

편집 한 후에도 여전히 잘못되었습니다. 'unset ($ key)'는 배열 요소를 제거하지 않습니다. –

+0

내 잘못, 미안, 지금은 잘 작동하고있어. – guest459473