2011-02-26 5 views
1

배열에서 삭제 : 난 단지 지난 $의 값이있는 경우, 이제내가 객체의 배열이

$obj = array(); 

// add the new items 
$row = new stdClass(); 
$row->first = $first; 
$row->last = $last; 
$row->phone = $phone; 

$obj[] = $row; 

를, 각각의 키/값을 지정하지 않고 전체 $ 행 개체를 삭제하는 방법은 무엇입니까 ? (그것을 이해하는 데 도움이 경우는 MySQL의 문이 있다면, 그것은 같은 것을 할 것 "DELETE * $ OBJ WHERE $ 로우 -> 마지막 = '토마스'FROM")

들으

+0

$ obj에서 $ row를 (를) 삭제 하시겠습니까? – Endophage

+0

방금 ​​그걸 던져 버렸어. 분명히 이해하지 못하면 그걸 무시한다. –

답변

1

키를 알아야합니다. 그러나 배열을 반복하여 찾을 수 있습니다.

/* Your original code: */ 
$obj = array(); 

// add the new items 
$row = new stdClass(); 
$row->first = $first; 
$row->last = $last; 
$row->phone = $phone; 

$obj[] = $row; 

/* My addition: */ 
$theOneToDelete = $last; 
foreach ($obj as $key => $row) { 
    if ($row->last == $theOneToDelete) { 
     unset($obj[$key]); 
     break; 
    } 
} 

array_* 기능의 일부와 terser 방법이있을 수 있지만, 그것을 밖으로 낳는다.

2

인가 unset($row); 무엇 필요? 그러나 메모리를 절약하기 위해 메모리를 절약하기 위해 메모리를 절약하기 위해 메모리를 절약 할 필요가 없습니다. ...

+0

+1 또는 그냥'$ row = null; – Endophage

+0

'unset()'은 메모리를 즉시 비우지 않는다. 가비지 컬렉터가 적절하다고 판단되면 PHP에서 메모리가 해제됩니다. –

+0

나는이 배열 요소를 원래대로 설정하지 않을 것이라고 생각한다. 물리적으로 그들은 잠시 동안 메모리에서 동일한 객체가 될 수 있지만 (이 시점에서 copy-on-write), 의미 적으로 분리되어 있습니다. –

1
foreach ($obj as $key => $value) { 
    if($obj[$key]->last == $last){ 
    unset($obj[$key]); 
    } 
} 

죄송합니다. 응답 코드의 형식을 지정하지 않았습니다. 나는 신입이다! = P