값에 의한 PHP 배열 삭제 (키가 아님)
PHP값에 의한 PHP 배열 삭제 (키가 아님)
다음과 같이 PHP 배열이 있습니다.
$messages = [312, 401, 1599, 3, ...];
값 $ del_val을 포함하는 요소를 삭제하려고합니다 (예 : $ del_val = 401). 그러나 키를 모르겠습니다. 이것은 도움이 될 수 있습니다 : 각 가치는 한 번만있을 수 있습니다.
이 작업을 수행하는 가장 간단한 기능을 찾고 있습니다.
해결법
-
==============================
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.글쎄, 배열에서 요소를 삭제하는 것은 기본적으로 하나의 요소와 단지 차이를 설정하는 것입니다.
글쎄, 배열에서 요소를 삭제하는 것은 기본적으로 하나의 요소와 단지 차이를 설정하는 것입니다.
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 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.배열에 해당 값을 가진 요소가 하나만 포함된다는 사실을 알고 있다면 할 수 있습니다.
배열에 해당 값을 가진 요소가 하나만 포함된다는 사실을 알고 있다면 할 수 있습니다.
$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.
$fields = array_flip($fields); unset($fields['myvalue']); $fields = array_flip($fields);
-
==============================
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.다음 코드에 따라 $ 메시지에서 반복되는 값이 제거됩니다.
다음 코드에 따라 $ 메시지에서 반복되는 값이 제거됩니다.
$ messages = array_diff ($ messages, array (401));
-
==============================
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.또는 간단히 수동 방법 :
또는 간단히 수동 방법 :
foreach ($array as $key => $value){ if ($value == $target_value) { unset($array[$key]); } }
배열에 대한 모든 권한을 가지고 있기 때문에 가장 안전한 방법입니다.
-
==============================
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.여러 값을 삭제하려면이 값을 사용해보십시오.
여러 값을 삭제하려면이 값을 사용해보십시오.
while (($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); }
-
==============================
12.넌 할 수있어:
넌 할 수있어:
unset($messages[array_flip($messages)['401']]);
설명 : 배열을 뒤집은 후 키 401이있는 요소를 삭제하십시오.
-
==============================
13.> php5.3을 가지고 있다면, 한 줄의 코드가 있습니다 :
> php5.3을 가지고 있다면, 한 줄의 코드가 있습니다 :
$array = array_filter($array, function($i) use ($value){return $i != $value;});
-
==============================
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.array_search ()로 키를 가져옵니다.
array_search ()로 키를 가져옵니다.
-
==============================
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.삭제할 값이 배열에 있거나 포함될 수 있습니다. array_diff 함수를 사용하십시오. 이런 일에 큰 도움이 될 것 같습니다.
삭제할 값이 배열에 있거나 포함될 수 있습니다. array_diff 함수를 사용하십시오. 이런 일에 큰 도움이 될 것 같습니다.
array_diff
$arrayWithValuesRemoved = array_diff($arrayOfData, $arrayOfValuesToRemove);
-
==============================
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.열쇠를 모르는 경우 중요하지 않습니다.
열쇠를 모르는 경우 중요하지 않습니다.
값을 키로 지정할 수 있습니다. 즉, 즉시 값을 찾을 수 있습니다. 모든 요소에서 반복적으로 검색하는 것보다 낫습니다.
$messages=array(); $messages[312] = 312; $messages[401] = 401; $messages[1599] = 1599; $messages[3] = 3; unset($messages[3]); // no search needed
-
==============================
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.또는 연산자를 사용하는 한 줄 짜기 :
또는 연산자를 사용하는 한 줄 짜기 :
($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);
-
==============================
22.허용 된 대답은 배열을 연관 배열로 변환하므로 허용 된 응답과 비 연관 배열로 유지하려는 경우 array_values도 사용해야 할 수 있습니다.
허용 된 대답은 배열을 연관 배열로 변환하므로 허용 된 응답과 비 연관 배열로 유지하려는 경우 array_values도 사용해야 할 수 있습니다.
if(($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); $arr = array_values($messages); }
참조는 여기에 있습니다.
-
==============================
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.단일 라이너 코드 (array_diff () 덕분에), 다음을 사용하십시오 :
단일 라이너 코드 (array_diff () 덕분에), 다음을 사용하십시오 :
$messages = array_diff($messages, array(401));
-
==============================
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)
from https://stackoverflow.com/questions/7225070/php-array-delete-by-value-not-key by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
OpenCart 전문가가되는 방법? (0) | 2018.09.13 |
---|---|
PHP 프로젝트에서 도우미 객체를 저장하고 액세스하고 구성하는 패턴은 무엇입니까? [닫은] (0) | 2018.09.13 |
Magento에서 간단한 'Hello World'모듈을 만드는 방법은 무엇입니까? (0) | 2018.09.13 |
Mcrypt에서 OpenSSL으로 암호화 라이브러리 업그레이드 (0) | 2018.09.13 |
PHP에서 클래스 속성 값을 동적으로 정의 할 수 있습니까? (0) | 2018.09.13 |