2013-02-18 4 views
0

I 배열에서 요소를 제거하려면 다음 코드를 :작동하지 않는 배열에서 요소를 제거

for ($i = 0; $i < count($contracte); $i++) { 
    if ($contracte[$i]['total_luni_contract'] == $contracte[$i]['luni_contract_cu_cheltuieli']) { 
     unset($contracte[$i]);   
    } 
} 

배열은 다음과 같습니다

Array 
(
    [0] => Array 
     (
      [id_contract] => 3 
      [numar] => 2955 
      [data] => 2011-04-04 
      [total_luni_contract] => 2 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [1] => Array 
     (
      [id_contract] => 25 
      [numar] => 14 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 1 
     ) 

    [2] => Array 
     (
      [id_contract] => 26 
      [numar] => 15 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 1 
     ) 

    [3] => Array 
     (
      [id_contract] => 27 
      [numar] => 16 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [4] => Array 
     (
      [id_contract] => 28 
      [numar] => 17 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [5] => Array 
     (
      [id_contract] => 29 
      [numar] => 23 
      [data] => 2013-01-08 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [6] => Array 
     (
      [id_contract] => 30 
      [numar] => 24 
      [data] => 2013-01-08 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [7] => Array 
     (
      [id_contract] => 31 
      [numar] => 33 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 1 
     ) 

    [8] => Array 
     (
      [id_contract] => 32 
      [numar] => 34 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [9] => Array 
     (
      [id_contract] => 33 
      [numar] => 35 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [10] => Array 
     (
      [id_contract] => 34 
      [numar] => 36 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [11] => Array 
     (
      [id_contract] => 35 
      [numar] => 37 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [12] => Array 
     (
      [id_contract] => 36 
      [numar] => 38 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [13] => Array 
     (
      [id_contract] => 37 
      [numar] => 39 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [14] => Array 
     (
      [id_contract] => 38 
      [numar] => 40 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [15] => Array 
     (
      [id_contract] => 39 
      [numar] => 41 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [16] => Array 
     (
      [id_contract] => 40 
      [numar] => 42 
      [data] => 2013-01-09 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [17] => Array 
     (
      [id_contract] => 41 
      [numar] => 43 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [18] => Array 
     (
      [id_contract] => 42 
      [numar] => 44 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [19] => Array 
     (
      [id_contract] => 43 
      [numar] => 45 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [20] => Array 
     (
      [id_contract] => 44 
      [numar] => 46 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 6 
     ) 

    [21] => Array 
     (
      [id_contract] => 45 
      [numar] => 47 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 6 
     ) 

    [22] => Array 
     (
      [id_contract] => 46 
      [numar] => 48 
      [data] => 2013-01-09 
      [total_luni_contract] => 6 
      [luni_contract_cu_cheltuieli] => 4 
     ) 

) 

내가 코드를 실행 한 후, 배열은 동일하게 유지됩니다. $contracte[1], $contracte[2], $contracte[7]$contracte[20]은 설정하지 않아야합니다.

이상형?

+0

을 작동이 유효하지 않습니다. 에코와 함께 루핑을 시도하고 통과 여부를 확인하십시오. 틀린 결과가 성가신 일이 될 수 있습니다 ^^ –

답변

0

대신 배열에 인 을 실행하십시오. foreach 루프를 사용하여 현재 반복중인 배열에서 키를 제거하는 것이 완벽하게 안전하다는 것이 입증되었습니다.

foreach($contracte as $cheie => $contract) { 
    if ($contract['total_luni_contract'] == $contract['luni_contract_cu_cheltuieli']) { 
     unset($contracte[$cheie]); 
    } 
} 
+0

예, if() 문을 입력하지만, 조건이 충족되는 경우뿐만 아니라 반복 될 때마다 무언가를 인쇄합니다. – Psyche

+0

그것은 작동합니다. 고마워. – Psyche

0

은 ($ contracte에 $ 1, 1) 내지 array_splice를 대신

array_splice를 사용하여 시도;

또한 배열에서 항목을 제거 할 때 $ i를 감소시켜 $ i 위치에서 항목을 다시 검사 할 수 있습니다.

+0

내 상황에 맞는 코드 샘플을 제공해 주시겠습니까? – Psyche

1

문제점 : 루프가 두 번째 요소 (1)에 도달하면 해당 요소가 설정 해제되므로 요소 2가 해당 위치에옵니다. 그래서 다음 루프에서 다음 요소가 될 $ i = 1을 검사합니다. 그래서 (2)는 건너 뛰었습니다.

솔루션 :

사용 foreach는

foreach($contracte as $key=> $val) { 
    if ($val['total_luni_contract'] == $val['luni_contract_cu_cheltuieli']) { 
     unset($contracte[$key]); 
    } 
} 

또는

문자열로 키 확인 - 다음 연관 배열과 솔루션을합니다.

배열이 같은 경우

: 정말 작동 "하지"안) (해제, 그것은 가능성이 IF 문의이 간단한 예에서

Array 
(
    [one] => Array 
     (
      [id_contract] => 3 
      [numar] => 2955 
      [data] => 2011-04-04 
      [total_luni_contract] => 2 
      [luni_contract_cu_cheltuieli] => 0 
     ) 

    [two] => Array 
     (
      [id_contract] => 25 
      [numar] => 14 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 1 
     ) 

    [three] => Array 
     (
      [id_contract] => 26 
      [numar] => 15 
      [data] => 2013-01-07 
      [total_luni_contract] => 1 
      [luni_contract_cu_cheltuieli] => 1 
     ) 

    [four] => Array 
     (
      [id_contract] 
관련 문제