2016-06-25 4 views
1

특정 값으로 선택된 배열 내에서 전체 배열을 삭제하고 싶습니다. 이것은 내가 지금까지 얻은 코드입니다.값으로 PHP 배열에서 PHP 배열을 삭제하십시오.

배열을 모든 하위 배열로 설정 해제 한 다음 하위 배열을 다시 삽입하면 배열이 커질수록 성능 문제가 커질 수 있습니다.

내 질문은 아래 코드를 최적화하거나 한 배열을 제거하고 나머지는 그대로 둡니다. 값을 검색 할 때 예를 들어, 대부분의 경우 잘못된 결과를 반환합니다

감사합니다 :)

<?php 

$currentValue = '#6'; 

$otherValue = [ "ID" => '2', "valueID" => '#6' ]; 
$otherValue2 = [ "ID" => '3', "valueID" => '#7' ]; 
$otherValue3 = [ "ID" => '4', "valueID" => '#8' ]; 
$valueArray = [ $otherValue, $otherValue2, $otherValue3 ]; 

echo 'current value: '.$currentValue; 
echo '<br><br>'; 
print_r($valueArray); 
echo '<br><br>'; 
foreach($valueArray as $key => $value) { 
    echo 'Value: '; 
    print_r($value); 
    if(($key = array_search($currentValue, $value)) !== false) { 
     echo ' - true, '.$currentValue.' is in $value<br>'; 

     unset($value); 
     unset($valueArray); 

     if(isset($value)) { 
      print_r($value); 
      echo '<br>'; 
     } else { 
      echo '$value was deleted<br><br>'; 
     } 
    } else { 
     echo ' - false<br>'; 
     $valueArray[] = $value; 
    } 

} 
echo '<br>'; 
print_r($valueArray); 

?> 
+0

체크 아웃을 원할 수도 있습니다. codereview.stackexchange.com –

+0

'$ currentValue'가 검색된 배열의 어디에 있는지 모르기 때문에'array_search()'를 사용하고 있습니까? 항상 'valueID' 키 아래에 있다면이 구체적인 키를 확인하는 것이 훨씬 빠릅니다 if ($ value ['valueID '] === $ currentValue) {...}'또는'return $ value ['valueID '] = == $ currentValue;'trincot의 대답이 – shudder

+0

인 경우 @shudder, 실제로는 내 코드에서'! =='이됩니다. – trincot

답변

1

코드는 전혀 발견, 또는 마지막 하위 배열되지 않습니다. 이 때문에 다음과 같은 라인이다 :

unset($valueArray); 

첫 번째 문은 두 번째로 만든 이전의 결과를 파괴 그건
$valueArray[] = $value; 

. 또는 첫 번째가 실행되지 않으면 두 번째는 원래 배열의 2 배가되는 원래 배열에 추가됩니다.

대신 당신은 array_filter을 사용할 수

$valueArray = array_filter($valueArray, function ($value) use ($currentValue) { 
    return array_search($currentValue, $value) === false; 
}); 

eval.in에서 실행을 참조하십시오.

@shudder가 주석에서 언급했듯이 모든 키의 값을 검색하는 것은 이상한 일입니다. 예를 들어, valueID 키 아래에있는 것으로 예상되는 것처럼 보입니다. 이 경우

당신은 당신의 코드를 최적화 할 수 있습니다

$valueArray = array_filter($valueArray, function ($value) use ($currentValue) { 
    return $value['valueID'] !== $currentValue; 
}); 

그것이 eval.in에서 실행을 참조하십시오.

+0

array_filter를 사용하지 않았지만 시도해 봅니다. – Antari24

+0

OK, shudder의 설명과 방금 추가 한 문단을 주목하십시오. – trincot

+0

array_filter는 매력처럼 작동합니다! 그 점을 지적 해 주셔서 감사합니다. – Antari24

관련 문제