source

PHP: 배열에서 특정 요소를 제거하려면 어떻게 해야 합니까?

nicesource 2022. 12. 24. 17:22
반응형

PHP: 배열에서 특정 요소를 제거하려면 어떻게 해야 합니까?

요소의 값을 알고 있을 때 요소를 배열에서 제거하려면 어떻게 해야 합니까?예를 들어 다음과 같습니다.

어레이가 있습니다.

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

가 입력하다strawberry

strawberry에서 삭제되다$array.

자세한 설명:

쉼표로 구분된 항목 목록을 저장하는 데이터베이스가 있습니다.코드는 사용자의 선택 항목에 따라 목록을 가져옵니다.따라서 스트로베리를 선택한 경우 스트로베리가 있는 경우 모든 엔트리를 코드화하고 split()를 사용하여 이를 배열로 변환합니다.사용자가 선택한 아이템(예: 딸기)을 어레이에서 삭제하도록 하겠습니다.

이 명령을 사용하여 키를 가져오고 발견된 경우 를 사용하여 제거합니다.

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

array_search항목을 찾을 수 없는 경우 false(PHP 4.2.0까지 null)를 반환합니다.

같은 값의 항목이 여러 개 있을 경우 를 사용하여 모든 항목의 키를 가져올 수 있습니다.

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}

1라인 솔루션에 사용:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

...추가 기능이나 포어치 루프가 필요 없습니다.

if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}

여기서 플레인 어레이를 사용하고 있는 경우는, 다음의 코드를 사용할 필요가 있습니다.

if (($key = array_search('strawberry', $array)) !== false) {
    array_splice($array, $key, 1);
}

unset($array[$key])는 요소를 삭제할 뿐 플레인 배열의 순서를 변경하지 않습니다.

어레이가 있고 array_splice를 사용하고 있다고 가정합니다.

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array); 
// yields the array ['apple', 'orange', 'blueberry', 'kiwi']

설정 해제와 비교:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

:unset($array[$key])는 배열 순서를 변경하지 않습니다.

한 줄만 할 수 있습니다.배열에서 요소가 삭제됩니다.


$array=array_diff($array,['strawberry']);


하여 특정 할 수 .$v:

$arr = array_filter($arr, function($v){
    return $v != 'some_value';
});

다음과 같이 됩니다.

 function rmv_val($var)
 {
     return(!($var == 'strawberry'));
 }

 $array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

 $array_res = array_filter($array, "rmv_val");

현재 다음 기능을 사용하고 있습니다.

function array_delete($del_val, $array) {
    if(is_array($del_val)) {
         foreach ($del_val as $del_key => $del_value) {
            foreach ($array as $key => $value){
                if ($value == $del_value) {
                    unset($array[$key]);
                }
            }
        }
    } else {
        foreach ($array as $key => $value){
            if ($value == $del_val) {
                unset($array[$key]);
            }
        }
    }
    return array_values($array);
}

삭제할 요소를 포함하는 배열 또는 문자열만 입력할 수 있습니다.다음과 같이 적습니다.

$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'apple'), $detils);

또는

$detils = array_delete('orange', $detils);

인덱스도 다시 만들 수 있습니다.

이는 어레이 내의 여러 값을 삭제할 수 있는 간단한 반복입니다.

    // Your array
    $list = array("apple", "orange", "strawberry", "lemon", "banana");

    // Initilize what to delete
    $delete_val = array("orange", "lemon", "banana");

    // Search for the array key and unset   
    foreach($delete_val as $key){
        $keyToDelete = array_search($key, $list);
        unset($list[$keyToDelete]);
    }

몇 개 , 이 질문에는 더 하고 싶은 게 이 질문을 때 더 하고 말이 있어요.unset ★★★★★★★★★★★★★★★★★」array_diff특정 요소를 삭제했을 때 새 배열의 인덱스를 재생하는 데 몇 가지 문제가 있었습니다(초기 인덱스가 저장되었기 때문입니다).

예시로 돌아가겠습니다.

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

또는

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

결과를 인쇄하면 다음과 같은 정보를 얻을 수 있습니다.

foreach ($array_without_strawberries as $data) {
   print_r($data);
}

결과:

> apple
> orange
> blueberry
> kiwi

그러나 인덱스는 저장되므로 다음과 같은 요소에 액세스할 수 있습니다.

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

따라서 최종 어레이는 다시 인덱싱되지 않습니다. 이 뒤에 요.unset또는array_diff:

$array_without_strawberries = array_values($array);

그 후 어레이는 일반 인덱스가 됩니다.

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

이 투고 관련: 어레이 재인덱스화

여기에 이미지 설명 입력

도움이 되었으면 좋겠다

이 간단한 방법을 사용하여 도움이 되기를 바랍니다.

foreach($array as $k => $value)
    {
      
        if($value == 'strawberry')
        {
          unset($array[$k]);
        }
    }

보다 나은 접근법은 자신의 값을 연관지을 수 있는 어레이에 키로서 유지한 후array_keys()실제 어레이를 원할 때 여기에 표시됩니다.그래야 사용할 필요가 없습니다.array_search자신의 요소를 찾을 수 있습니다.

PHP 어레이 삭제에 대한 답변은 (키가 아닌) 값으로 https://stackoverflow.com/users/924109/rok-kralj에서 제공

IMO는 제거 및 변환되지 않으므로 최적의 답변입니다.

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

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

면책사항:이 솔루션은 기존 어레이를 그대로 유지한 채 새로운 어레이 복사본을 생성합니다.이것에 의해 변환되는 기존의 답변과는 대조됩니다.이거 때문에 좀 느려질 수도 있어요.

저는 같은 질문에 대한 답을 찾다가 이 주제를 발견했습니다.두 가지 주요 방법이 있습니다.array_search&unset및 의 사용array_diff얼핏 보기에는 (사용 시처럼) 어레이를 추가할 필요가 없기 때문에 첫 번째 방법이 더 빠를 것 같았습니다.array_diff하지만 저는 작은 벤치마크를 작성하여 두 번째 방법이 더 간결할 뿐만 아니라 더 빠르다는 것을 확인했습니다.공유하게 되어 기쁩니다. :)

https://glot.io/snippets/f6ow6biaol

array_key_exists를 사용하여 다음과 같은 어레이 내의 키를 검색하는 것이 좋습니다.

Array([0]=>'A',[1]=>'B',['key'=>'value'])

여기서 array_search 및 in_array()는 동작하지 않기 때문에 지정된 내용을 효과적으로 찾을 수 없습니다.그리고 unset()사용하여 삭제한다.

누군가에게 도움이 될 것 같아요.

특정 배열 값을 삭제하여 숫자 배열 생성

    <?php
    // create a "numeric" array
    $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');

    //Normarl display
    print_r($animals);
    echo "<br/><br/>";

    //If splice the array
    //array_splice($animals, 2, 2);
    unset($animals[3]); // you can unset the particular value
    print_r($animals);

    ?>

이 링크를 참조할 수 있습니다.

$remove= "strawberry";
$array = ["apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
        if ($value!=$remove) {
        echo $value.'<br/>';
                continue;
        }
}

를 사용하여 다음 작업을 수행합니다.

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

array_search()발견된 요소의 키를 반환합니다.이 키를 사용하여 원래 배열에서 해당 요소를 제거할 수 있습니다.unset()다시 돌아올 것이다.FALSE그러나 실패 시 성공 시 "허위" 값을 반환할 수 있습니다(키:0예를 들어) 그렇기 때문에 엄격한 비교는!==연산자가 사용됩니다.

if()스테이트먼트는 다음 중 어느 쪽을 선택했는지 여부를 확인합니다.array_search()값이 반환되었으며 반환된 경우에만 액션을 수행합니다.

unset($array[array_search('strawberry', $array)]);
<?php 
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
foreach ($get_dept as $key5 => $dept_value) {
                if ($request->role_id == 5 || $request->role_id == 6){
                    array_splice($get_dept, $key5, 1);
                }
            }
$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
     function remove_embpty($values)
     {
        if($values=='orange')
        {
            $values='any name';
        }
        return $values;
     }
     $detils=array_map('remove_embpty',$detils);
    print_r($detils);

언급URL : https://stackoverflow.com/questions/2448964/php-how-to-remove-specific-element-from-an-array

반응형