2011-04-25 10 views
2

내가 이런 2 차원 배열에 물건을 추가하고 :PHP 설정되지 않은 배열

$_SESSION['vehicles'][] = array ('model' => $_REQUEST['blah1'], 'price' => $_REQUEST['blah2'], 'year' => $_REQUEST['blah3']); 

은 내가 어떻게이 '모델'이 세션에서 모든 배열을 제거 할 것은 내 선택의 변수에 = ? (주의 : 항상 같은 모델로 세션에서 많은 배열이있을 것이다.)

은 내가 아래 시도했지만 내 세션 배열에서 아무것도 제거하지 않는 것 :

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as $vehicle) 
{ 
    unset($vehicle[$model]); 
} 

감사합니다!

답변

4

당신은에있다 : 당신의 차량을 각 차량에 대한

  • , 테스트의 모델의 경우 이상

    • 으로 반복 찾고있는 사람이
    • 이고, 그렇다면 삭제하십시오.
    이와 같은 코드의 일부를 번역 할 수


    :

    $model = "toyota"; 
    foreach ($_SESSION['vehicles'] as $key => $vehicle) 
    { 
        if ($vehicle['model'] == $model) { 
         // The current vehicle's model is what you are searching for 
         // => delete if from $_SESSION 
         unset($_SESSION['vehicles'][$key]); 
        } 
    } 
    
  • 5

    $ 차량 복사에 의해 전달되기 때문에, 해제 $ 차량은 아무것도하지

    $model = "toyota"; 
    foreach ($_SESSION['vehicles'] as $idx => $vehicle){ 
        if($vehicle['model'] == $model){ 
         unset($_SESSION['vehicles'][$idx]); 
        } 
    } 
    
    5
    $model = 'toyota'; 
    
    // PHP <= 5.2 
    $_SESSION['vehicles'] = array_filter($_SESSION['vehicles'], 
           create_function('$v', "return \$v['model'] != '$model';")); 
    
    // PHP 5.3+ 
    $_SESSION['vehicles'] = array_filter($_SESSION['vehicles'], 
           function ($v) use ($model) { return $v['model'] != $model; }); 
    

    또는 당신의 접근 방식 : 당신이 제거하려고하는 것은 $vehicle['toyota']입니다

    foreach ($_SESSION['vehicles'] as $key => $vehicle) { 
        if ($vehicle['model'] == $model) { 
         unset($_SESSION['vehicles'][$key]); 
        } 
    } 
    
    +0

    마지막 코드는 정의되지 않은 동작 냈다되어 (작동하지만, 그 자체가 정의되지 않은) 현재 좋아 반복자 또는 배열에 반환하기 키입니까? +1 – NikiC

    +0

    @nikic 완벽하게 작동합니다.'foreach'는 배열 복사본에서 작동합니다. – deceze

    +0

    아, 정보 주셔서 감사합니다. – NikiC

    2

    아니다 배열에 선물

    대신 이것을 시도하십시오.

    $model = "toyota"; 
    foreach ($_SESSION['vehicles'] as $key=>$vehicle) 
    { 
        if($model == $vehicle['model']) { 
         unset($_SESSION['vehicles'][$key]); 
        }  
    } 
    
    3
    foreach($_SESSION['vehicles'] as $key => $vehicle) { 
        if($vehicle['model'] == "toyota") { 
         unset($_SESSION['vehicles'][$key]); 
        } 
    } 
    

    해야 할 일.

    답변을 빨리 작성해야합니다.

    0

    처음에는 $ _SESSION [ 'vehicles']이 번호가 매겨진 배열이므로 $ vehicle [$ model]은 작동하지 않습니다. 다음은 foreach 루프에서 항목을 수정합니다 :

    PHP 5로, 당신은 쉽게 &와 $ 값 이전으로 배열의 요소를 수정할 수 있습니다. 그러면 값을 복사하는 대신 참조 이 할당됩니다.

    $model = "toyota"; 
    foreach ($_SESSION['vehicles'] as &$vehicle) 
    { 
        if ($vehicle['model'] == $model) 
         unset($vehicle); 
    } 
    
    +0

    이것은 실제 배열 요소가 아닌 참조를 설정하지 않는다는 것을 의미합니다 ... – deceze

    +0

    그가 실제 차량에서 작동하는 단지 $ vehicle 대신 & $ vehicle을 할 때, 복사본이 아닙니다. –

    +0

    @ddd https : // ideone.com/StQ0T – deceze

    관련 문제