내 배열의 일부 요소는 사용자가 제출 한 내용에 따라 빈 문자열입니다. 해당 요소를 제거해야합니다. 내가 이거 가지고있어:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
그러나 작동하지 않습니다. $linksArray
여전히 빈 요소가 있습니다. 나는 또한 empty()
함수로 그것을 시도 했지만 결과는 동일합니다.
답변
문자열 배열을 다룰 때 간단하게 사용할 수 array_filter()
있습니다.이 모든 것을 편리하게 처리합니다.
print_r(array_filter($linksArray));
있다는 사실에 유의 콜백이 제공되지 않으면 , 어레이의 모든 항목이 동일 FALSE
(참조 논리 값으로 변환 을 제거한다). 따라서 정확한 문자열 '0'
인 요소를 유지 해야하는 경우 사용자 정의 콜백이 필요합니다.
// PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));
// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));
// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));
답변
array_filter
빈 요소를 제거 하는 데 사용할 수 있습니다 .
$emptyRemoved = array_filter($linksArray);
(int) 0
배열에 있다면 다음을 사용할 수 있습니다.
$emptyRemoved = remove_empty($linksArray);
function remove_empty($array) {
return array_filter($array, '_remove_empty_internal');
}
function _remove_empty_internal($value) {
return !empty($value) || $value === 0;
}
편집 : 어쩌면 요소가 비어 있지 않지만 하나 이상의 공백이있을 수 있습니다 … 사용하기 전에 다음을 사용할 수 있습니다array_filter
$trimmedArray = array_map('trim', $linksArray);
답변
이 주제에 대한 가장 인기있는 답변은 절대적으로 부정확합니다.
다음 PHP 스크립트를 고려하십시오.
<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));
왜 이런거야? 단일 ‘0’문자를 포함하는 문자열도 부울 false로 평가되므로 빈 문자열이 아니더라도 여전히 필터링됩니다. 그것은 버그 일 것입니다.
내장 strlen 함수를 필터링 함수로 전달하면 비어 있지 않은 문자열의 경우 0이 아닌 정수와 빈 문자열의 경우 0이 아닌 정수를 반환하므로 작동합니다. 0이 아닌 정수는 부울로 변환 될 때 항상 true로 평가되는 반면 0이 아닌 정수는 부울로 변환 할 때 항상 false로 평가됩니다.
따라서 절대적이고 결정적인 정답은 다음과 같습니다.
$arr = array_filter($arr, 'strlen');
답변
$linksArray = array_filter($linksArray);
“콜백이 제공되지 않으면 FALSE와 동일한 입력 항목이 모두 제거됩니다.” -http : //php.net/manual/en/function.array-filter.php
답변
$myarray = array_filter($myarray, 'strlen'); //removes null values but leaves "0"
$myarray = array_filter($myarray); //removes all null values
답변
당신은 할 수 있습니다
array_filter($array)
array_filter : “콜백이 제공되지 않으면 FALSE와 동일한 입력 항목이 모두 제거됩니다.” 이는 값이 NULL, 0, ‘0’, ”, FALSE, array () 인 요소도 제거됨을 의미합니다.
다른 옵션은
array_diff($array, array(''))
NULL, ”및 FALSE 값을 가진 요소를 제거합니다.
도움이 되었기를 바랍니다 🙂
최신 정보
다음은 예입니다.
$a = array(0, '0', NULL, FALSE, '', array());
var_dump(array_filter($a));
// array()
var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());
var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())
요약하면 :
- 0 또는 ‘0’은 0과 ‘0’을 제거합니다.
- NULL, FALSE 또는 ”는 NULL, FALSE 및 ”를 제거합니다.
답변
foreach($linksArray as $key => $link)
{
if($link === '')
{
unset($linksArray[$key]);
}
}
print_r($linksArray);