복붙노트

값에 의한 PHP 배열 삭제 (키가 아님)

PHP

값에 의한 PHP 배열 삭제 (키가 아님)

다음과 같이 PHP 배열이 있습니다.

$messages = [312, 401, 1599, 3, ...];

값 $ del_val을 포함하는 요소를 삭제하려고합니다 (예 : $ del_val = 401). 그러나 키를 모르겠습니다. 이것은 도움이 될 수 있습니다 : 각 가치는 한 번만있을 수 있습니다.

이 작업을 수행하는 가장 간단한 기능을 찾고 있습니다.

해결법

  1. ==============================

    1.array_search ()를 사용하여 설정을 해제하고 다음을 시도하십시오.

    array_search ()를 사용하여 설정을 해제하고 다음을 시도하십시오.

    if (($key = array_search($del_val, $messages)) !== false) {
        unset($messages[$key]);
    }
    

    array_search ()는 찾은 요소의 키를 반환합니다. unset ()을 사용하여 원래 배열에서 해당 요소를 제거하는 데 사용할 수 있습니다. 실패하면 FALSE를 반환하지만 성공하면 false-y 값을 반환 할 수 있습니다 (예 : 키가 0 일 수 있음). 따라서 엄격한 비교! == 연산자가 사용됩니다.

    if () 문은 array_search ()가 값을 반환했는지 여부를 확인하고 수행 한 경우에만 작업을 수행합니다.

  2. ==============================

    2.글쎄, 배열에서 요소를 삭제하는 것은 기본적으로 하나의 요소와 단지 차이를 설정하는 것입니다.

    글쎄, 배열에서 요소를 삭제하는 것은 기본적으로 하나의 요소와 단지 차이를 설정하는 것입니다.

    array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
    

    그것은 일반적으로 잘 일반화되어 있습니다. 원한다면 동시에 원하는만큼 많은 요소를 제거 할 수 있습니다.

    면책 조항 : 내 솔루션은 배열의 새로운 복사본을 생성하는 반면, 변경된 수용 대답과는 달리 이전 솔루션을 그대로 유지합니다. 이 때문에 약간 느릴 수 있습니다.

  3. ==============================

    3.한 가지 흥미로운 방법은 array_keys ()를 사용하는 것입니다.

    한 가지 흥미로운 방법은 array_keys ()를 사용하는 것입니다.

    foreach (array_keys($messages, 401, true) as $key) {
        unset($messages[$key]);
    }
    

    array_keys () 함수는 두 개의 추가 매개 변수를 사용하여 특정 값의 키와 엄격한 검사가 필요한지 (예 : === 비교를 위해) 키를 반환합니다.

    동일한 값 (예 : [1, 2, 3, 3, 4])을 가진 여러 배열 항목을 제거 할 수도 있습니다.

  4. ==============================

    4.배열에 해당 값을 가진 요소가 하나만 포함된다는 사실을 알고 있다면 할 수 있습니다.

    배열에 해당 값을 가진 요소가 하나만 포함된다는 사실을 알고 있다면 할 수 있습니다.

    $key = array_search($del_val, $array);
    if (false !== $key) {
        unset($array[$key]);
    }
    

    그러나 배열에서 값이 두 번 이상 나타날 수있는 경우이 작업을 수행 할 수 있습니다

    $array = array_filter($array, function($e) use ($del_val) {
        return ($e !== $del_val);
    });
    

    참고 : 두 번째 옵션은 PHP5.3 + 클로저에서만 작동합니다.

  5. ==============================

    5.

    $fields = array_flip($fields);
    unset($fields['myvalue']);
    $fields = array_flip($fields);
    
  6. ==============================

    6.다음 코드를 살펴보십시오.

    다음 코드를 살펴보십시오.

    $arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');
    

    넌 할 수있어:

    $arr = array_diff($arr, array('remove_me', 'remove_me_also'));
    

    그리고 그것은 당신에게이 배열을 줄 것입니다 :

    array('nice_item', 'another_liked_item')
    
  7. ==============================

    7.다음 코드에 따라 $ 메시지에서 반복되는 값이 제거됩니다.

    다음 코드에 따라 $ 메시지에서 반복되는 값이 제거됩니다.

    $ messages = array_diff ($ messages, array (401));

  8. ==============================

    8.가장 좋은 방법은 array_splice입니다.

    가장 좋은 방법은 array_splice입니다.

    array_splice($array, array_search(58, $array ), 1);
    

    Reason for Best는 http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/에 있습니다.

  9. ==============================

    9.또는 간단히 수동 방법 :

    또는 간단히 수동 방법 :

    foreach ($array as $key => $value){
        if ($value == $target_value) {
            unset($array[$key]);
        }
    }
    

    배열에 대한 모든 권한을 가지고 있기 때문에 가장 안전한 방법입니다.

  10. ==============================

    10.

    function array_remove_by_value($array, $value)
    {
        return array_values(array_diff($array, array($value)));
    }
    
    $array = array(312, 401, 1599, 3);
    
    $newarray = array_remove_by_value($array, 401);
    
    print_r($newarray);
    

    산출

    배열 ([0] => 312 [1] => 1599 [2] => 3)

  11. ==============================

    11.여러 값을 삭제하려면이 값을 사용해보십시오.

    여러 값을 삭제하려면이 값을 사용해보십시오.

    while (($key = array_search($del_val, $messages)) !== false) 
    {
        unset($messages[$key]);
    }
    
  12. ==============================

    12.넌 할 수있어:

    넌 할 수있어:

    unset($messages[array_flip($messages)['401']]);
    

    설명 : 배열을 뒤집은 후 키 401이있는 요소를 삭제하십시오.

  13. ==============================

    13.> php5.3을 가지고 있다면, 한 줄의 코드가 있습니다 :

    > php5.3을 가지고 있다면, 한 줄의 코드가 있습니다 :

    $array = array_filter($array, function($i) use ($value){return $i != $value;}); 
    
  14. ==============================

    14.밑줄의 논리를 빌려서 _reject하고 두 가지 기능을 만들었습니다 (사람들은 기능을 선호합니다!).

    밑줄의 논리를 빌려서 _reject하고 두 가지 기능을 만들었습니다 (사람들은 기능을 선호합니다!).

    array_reject_value :이 함수는 단순히 지정된 값을 거부합니다 (PHP4,5,7에서도 작동 함).

    function array_reject_value(array &$arrayToFilter, $deleteValue) {
        $filteredArray = array();
    
        foreach ($arrayToFilter as $key => $value) {
            if ($value !== $deleteValue) {
                $filteredArray[] = $value;
            }
        }
    
        return $filteredArray;
    }
    

    array_reject :이 함수는 단순히 호출 가능한 메소드를 거부합니다 (PHP> = 5.3에서 작동)

    function array_reject(array &$arrayToFilter, callable $rejectCallback) {
    
        $filteredArray = array();
    
        foreach ($arrayToFilter as $key => $value) {
            if (!$rejectCallback($value, $key)) {
                $filteredArray[] = $value;
            }
        }
    
        return $filteredArray;
    }
    

    그래서 우리의 예제에서 위의 함수를 다음과 같이 사용할 수 있습니다 :

    $messages = [312, 401, 1599, 3, 6];
    $messages = array_reject_value($messages, 401);
    

    또는 더 나은 : (이것은 우리에게 array_filter와 같은 것을 사용하는 더 나은 구문을 제공합니다)

    $messages = [312, 401, 1599, 3, 6];
    $messages = array_reject($messages, function ($value) {
        return $value === 401;
    });
    

    위의 내용은 우리가 단순히 이렇게 할 수있는 401보다 크거나 같은 모든 값을 제거하고자하는 것처럼 복잡한 작업에 사용될 수 있습니다.

    $messages = [312, 401, 1599, 3, 6];
    $greaterOrEqualThan = 401;
    $messages = array_reject($messages, function ($value) use $greaterOrEqualThan {
        return $value >= $greaterOrEqualThan;
    });
    
  15. ==============================

    15.array_search ()로 키를 가져옵니다.

    array_search ()로 키를 가져옵니다.

  16. ==============================

    16.@ Bojangles 대답이 나를 도왔다. 고맙습니다.

    @ Bojangles 대답이 나를 도왔다. 고맙습니다.

    필자의 경우 배열은 결합 적이거나 아닐 수 있으므로이 함수를 추가했습니다.

    function test($value, $tab) {
    
     if(($key = array_search($value, $tab)) !== false) {
        unset($tab[$key]); return true;
    
     } else if (array_key_exists($value, $tab)){
            unset($tab[$value]); return true;
    
     } else {
        return false; // the $value is not in the array $tab
     }
    
    }
    

    문안 인사

  17. ==============================

    17.삭제할 값이 배열에 있거나 포함될 수 있습니다. array_diff 함수를 사용하십시오. 이런 일에 큰 도움이 될 것 같습니다.

    삭제할 값이 배열에 있거나 포함될 수 있습니다. array_diff 함수를 사용하십시오. 이런 일에 큰 도움이 될 것 같습니다.

    array_diff

    $arrayWithValuesRemoved = array_diff($arrayOfData, $arrayOfValuesToRemove);
    
  18. ==============================

    18.OK .. 나는 이것이 전혀 효율적이지는 않지만 간단하고 직관적이며 읽기 쉽다는 것을 알고있다. 그래서 누군가가 더 많은 가치, 또는 더 구체적인 조건으로 작업 할 수 있도록 확장 될 수있는 멋진 해결책을 찾고 있다면 여기에 간단한 코드가 있습니다.

    OK .. 나는 이것이 전혀 효율적이지는 않지만 간단하고 직관적이며 읽기 쉽다는 것을 알고있다. 그래서 누군가가 더 많은 가치, 또는 더 구체적인 조건으로 작업 할 수 있도록 확장 될 수있는 멋진 해결책을 찾고 있다면 여기에 간단한 코드가 있습니다.

    $result = array();
    $del_value = 401;
    //$del_values = array(... all the values you don`t wont);
    
    foreach($arr as $key =>$value){
        if ($value !== $del_value){
            $result[$key] = $value;
        }
    
        //if(!in_array($value, $del_values)){
        //    $result[$key] = $value;
        //}
    
        //if($this->validete($value)){
        //      $result[$key] = $value;
        //}
    }
    
    return $result
    
  19. ==============================

    19.열쇠를 모르는 경우 중요하지 않습니다.

    열쇠를 모르는 경우 중요하지 않습니다.

    값을 키로 지정할 수 있습니다. 즉, 즉시 값을 찾을 수 있습니다. 모든 요소에서 반복적으로 검색하는 것보다 낫습니다.

    $messages=array();   
    $messages[312] = 312;    
    $messages[401] = 401;   
    $messages[1599] = 1599;   
    $messages[3] = 3;    
    
    unset($messages[3]); // no search needed
    
  20. ==============================

    20.귀하의 요구 사항에 따라 귀하의 배열에 고유 한 값을 유지하는 데 관심이 있다면 "각 값은 한 번만 존재할 수 있습니다."그런 다음 array_unique ()가 원하는 것일 수 있습니다.

    귀하의 요구 사항에 따라 귀하의 배열에 고유 한 값을 유지하는 데 관심이 있다면 "각 값은 한 번만 존재할 수 있습니다."그런 다음 array_unique ()가 원하는 것일 수 있습니다.

    입력:

    $input = array(4, "4", "3", 4, 3, "3");
    $result = array_unique($input);
    var_dump($result);
    

    결과:

    array(2) {
      [0] => int(4)
      [2] => string(1) "3"
    }
    
  21. ==============================

    21.또는 연산자를 사용하는 한 줄 짜기 :

    또는 연산자를 사용하는 한 줄 짜기 :

    ($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);
    
  22. ==============================

    22.허용 된 대답은 배열을 연관 배열로 변환하므로 허용 된 응답과 비 연관 배열로 유지하려는 경우 array_values도 사용해야 할 수 있습니다.

    허용 된 대답은 배열을 연관 배열로 변환하므로 허용 된 응답과 비 연관 배열로 유지하려는 경우 array_values도 사용해야 할 수 있습니다.

    if(($key = array_search($del_val, $messages)) !== false) {
        unset($messages[$key]);
        $arr = array_values($messages);
    }
    

    참조는 여기에 있습니다.

  23. ==============================

    23.이 URL을 참조 할 수 있습니다.     기능을 위해

    이 URL을 참조 할 수 있습니다.     기능을 위해

    array-diff-key()
    
    <?php
    $array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
    $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
    
    var_dump(array_diff_key($array1, $array2));
    ?>
    

    그러면 출력은,

    array(2) {
      ["red"]=>
      int(2)
      ["purple"]=>
      int(4)
    }
    
  24. ==============================

    24.단일 라이너 코드 (array_diff () 덕분에), 다음을 사용하십시오 :

    단일 라이너 코드 (array_diff () 덕분에), 다음을 사용하십시오 :

    $messages = array_diff($messages, array(401));
    
  25. ==============================

    25.배열의 값을 삭제하는 또 다른 방법은 array_diff를 사용하는 것입니다. 내가 원한다면

    배열의 값을 삭제하는 또 다른 방법은 array_diff를 사용하는 것입니다. 내가 원한다면

    $my_array = array(1=>"a", "second_value"=>"b", 3=>"c", "d");
    $new_array_without_value_c = array_diff($my_array, array("c"));
    

    (Doc : http://php.net/manual/fr/function.array-diff.php)

  26. from https://stackoverflow.com/questions/7225070/php-array-delete-by-value-not-key by cc-by-sa and MIT license