2013-10-04 3 views
0

단순히 '볼' '0'PHP는 예상대로 작동하지

배열로 설정 한 배열의 모든 개체를 제거하는 것을 시도하고있다 :

{ 
"Count":5, 
"0":{"id":"1","visible":"0"}, 
"1":{"id":"3","visible":"0"}, 
"2":{"id":"1","visible":"0"}, 
"3":{"id":"2","visible":"0"}, 
"4":{"id":"3","visible":"0"} 
} 

PHP :

function cleanup($arr) { 
    for($i = 0; $i < (count($arr)-1); $i++) { 
     if($arr[$i]['visible'] == false) { 
      unset($arr[$i]); 
     } 
    } 
    $newarr = array_unique($arr, SORT_REGULAR); 
    $newarr['Count'] = count($newarr)-1; 

    return $newarr; 
} 

결과 : 내 마일에서

{ 
"Count":2, 
"3":{"id":"2","visible":"0"}, 
"4":{"id":"3","visible":"0"} 
} 

nd이 함수가 작동하고 { "Count": 0}을 반환해야합니다. 또한 '키'가 3,4 대신 0,1로 설정되지 않은 이유는 무엇입니까? 내가 어디로 잘못 가고 있니?

답변

2

for 루프 내에서 count ($ arr) -1을 사용하고 있으며 반복마다 다시 평가되므로 처음 세 번 설정을 취소하면 i는 3이지만 count ($ arr) -1)는 1이고 루프를 종료합니다. for 루프 앞에 $ j = count ($ arr) -1을 설정하고 for ($ i = 0; $ i < $ j; $ i ++)

일반적으로 나쁜 프로그래밍 연습 -wise) for 루프 내에서 count()와 같은 함수를 사용하십시오.

+0

팁 주셔서 감사합니다! 이것은 효과가있는 것처럼 보입니다. 전에 for 루프를 사용하지 않았더라도 : S – ChristopherStrydom

+0

한 번에 설정을 해제하지 않으시겠습니까? 'unset ($ arr); –

1

unset() 숫자 배열 중간에서 색인을 제거하면 배열 색인의 순서가 변경되지 않습니다. 직접 배열을 다시 색인해야합니다. array_values()이 도움이됩니다.

속성이 내게 합당하지 않으므로 삭제했습니다. 대신 count() 함수를 사용할 수 있습니다.

+0

감사합니다. 내 문제 중 하나를 해결 한 Count 함수를 사용하여 동적으로로드 될 때 배열의 크기에 쉽게 액세스 할 수 있습니다. – ChristopherStrydom

관련 문제