2013-05-11 4 views
2

Ok. 나는 다음과 같이 정의 채워진 배열이 있습니다 PHP에서 배열의 요소를 삭제합니다

$subs = array(); 
for (...) { 
    // extracting of variables $knowledgeLevel, $name, $short, $long 
    $subs [] = array (
     'knowledgeLevel' => $knowledgeLevel, 
     'name' => $name, 
     'shortTheory' => $short, 
     'longTheory' => $long 
    ); 
} 

다음 내가 값 $kl을 받게을, 나는 결국 배열 $subs $kl와 동일한 knowledgeLevel이있는 element에서 삭제할.

foreach ($subs as $subject) { 
    if ($subject['knowledgeLevel'] == $kl) { 
     unset ($subject); 
    } 
} 

foreach ($subs as $subject) { 
    if ($subject['knowledgeLevel'] == $kl) { 
     unset ($subject['knowledgeLevel']); 
     unset ($subject['name']); 
     unset ($subject['shortTheory']); 
     unset ($subject['longTheory']); 
    } 
} 

을하지만이 작동하지 않는 것 : 나는 그렇게하려고했습니다. 위하여

+1

을 정의? – Fabio

+0

'$ subs' 배열에서 원소를 제거하고 싶습니까? 숫자 배열이며 연관이 아닙니다. 그 요소는 연관 배열입니다. –

+0

동일한 배열 (전역으로 선언 된)을 사용하는 두 개의 함수가 있습니다. '$ kl'은 두 번째 함수의 매개 변수입니다 – Jannuzzo

답변

3

직접 &와 루프 선행 $으로 값 내에 배열 요소를 수정할 수있다. 이 경우 값은 참조로 지정됩니다. foreach ($subs as &$subject)

foreach ($subs as &$subject) 
    if ($subject['knowledgeLevel'] == $kl) 
     unset ($subject); 

또는 이것을 시도와

사용 & :

이 양식은 또한 각각의 반복에서 $ 키 변수에 현재 요소의 키를 할당합니다.

foreach ($subs as $key => $subject) 
    if ($subject['knowledgeLevel'] == $kl) 
     unset($subs[$key]); 
+0

과 내가 사용 해봐야 할 해결책 중 어느 것이 있습니까? – Jannuzzo

+0

다른 것은 없지만 제 스스로 두 번째를 선택합니다. 그것의 명확 때문에. – ncm

+0

@Jannuzzo. stackoverflow에 오신 것을 환영합니다. 내가 너에게 뭔가를 상기시켜 줄께. upvoting과 유용한 답변을 받아들이는 좋은 후원자가 될 수 있습니다. (- : – ncm

0

$subject$subs에 참조되지는 새로운 변수이고 unset($subject['anything']) 당신이 $subs에서 아무것도 삭제하지 않는

사용 for 루프 :`$ kl`이

for($i=0;$i<count($subs);$i++) { 
    if ($subs[$i]['knowledgeLevel'] == $kl) { 
     unset ($subs[$i]); 
    } 
} 
관련 문제