从数组中删除多个值
Remove multiple values from array
我有以下数组:
array(5) {
["destino"]=> string(11) "op_list_gen"
["id_terminal"]=> string(0) ""
["marca"]=> string(2) "--"
["tipo"]=> string(2) "--"
["lyr_content"]=> string(14) "aawaw"
}
如何从数组中删除值 "--" 和 empty 值?
我试过使用 foreach 并删除使用 unset 找到的元素,但它不起作用。
foreach ($array as $key => $arra) {
if(array_key_exists('--', $array)){
unset($arra[$key]);
}
}
$array = [
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw"
];
$new_array = array_filter($array, function($item){
if($item != '--' || $item != '')
return $item;
})
var_dump($new_array)
array_filter()
将获取每个条目,如果不是 --
或 ''
,则 return 它
使用array_filter:
$original = [
'destino' => 'op_list_get',
'id_terminal' => '',
'marca' => '--',
'tipo' => '--',
'lyr_content' => 'aawaw',
];
// values you want to filter away
$disallowArray = ['', '--'];
$filteredResult = array_filter($original, function($val) use($disallowArray) {
// check that the value is not in our disallowArray
return \in_array($val, $disallowArray, true) === false;
});
结果:
Array
(
[destino] => op_list_get
[lyr_content] => aawaw
)
您可以通过简单地遍历数组并在此过程中创建一个新数组来删除值:
$myarray = array(
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw",
}
$newarray = array();
foreach($myarray as $key => $value) {
if($value != "--" && $value != "") {
$newarray[$key] = $value;
}
}
或者,更优雅地,您可以使用 array_filter
函数。它需要一个回调函数,对于每个值,决定是否包含它。这也是 returns 一个新数组:
$newarray = array_filter($myarray, function($elem) {
if($elem != "" && $elem != "--") return $elem;
});
你可以使用array_filter
来解决这个问题:
$arr = [
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw"
];
$newArr = array_filter($arr, function($value) {
return !in_array($value, ['', '--']);
});
通用方法应如下所示:
$filter = function(...$excluded) {
return function ($value) use ($excluded) {
return !in_array($value, $excluded);
};
};
$newArray = array_filter($array, $filter('', '--'));
这种方法是可重用的,因为您不需要对值进行硬编码以正确洞察您的过滤功能。
正如所有其他答案所说,array_filter 是解决此问题的好方法。但是,这是返回一个新数组,实际上并没有修改原始数组。如果这就是您要找的,这可能是一种不同的方法:
// Start infinite loop
while(true){
// Check for value in array
if (($key = array_search('--', $arr)) !== false || ($key = array_search('', $arr)) !== false) {
// Unset the key
unset($arr[$key]);
// Reset array keys
$arr = array_values($arr);
} else {
// No more matches found, break the loop
break;
}
}
我有以下数组:
array(5) {
["destino"]=> string(11) "op_list_gen"
["id_terminal"]=> string(0) ""
["marca"]=> string(2) "--"
["tipo"]=> string(2) "--"
["lyr_content"]=> string(14) "aawaw"
}
如何从数组中删除值 "--" 和 empty 值?
我试过使用 foreach 并删除使用 unset 找到的元素,但它不起作用。
foreach ($array as $key => $arra) {
if(array_key_exists('--', $array)){
unset($arra[$key]);
}
}
$array = [
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw"
];
$new_array = array_filter($array, function($item){
if($item != '--' || $item != '')
return $item;
})
var_dump($new_array)
array_filter()
将获取每个条目,如果不是 --
或 ''
使用array_filter:
$original = [
'destino' => 'op_list_get',
'id_terminal' => '',
'marca' => '--',
'tipo' => '--',
'lyr_content' => 'aawaw',
];
// values you want to filter away
$disallowArray = ['', '--'];
$filteredResult = array_filter($original, function($val) use($disallowArray) {
// check that the value is not in our disallowArray
return \in_array($val, $disallowArray, true) === false;
});
结果:
Array
(
[destino] => op_list_get
[lyr_content] => aawaw
)
您可以通过简单地遍历数组并在此过程中创建一个新数组来删除值:
$myarray = array(
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw",
}
$newarray = array();
foreach($myarray as $key => $value) {
if($value != "--" && $value != "") {
$newarray[$key] = $value;
}
}
或者,更优雅地,您可以使用 array_filter
函数。它需要一个回调函数,对于每个值,决定是否包含它。这也是 returns 一个新数组:
$newarray = array_filter($myarray, function($elem) {
if($elem != "" && $elem != "--") return $elem;
});
你可以使用array_filter
来解决这个问题:
$arr = [
"destino" => "op_list_gen",
"id_terminal" => "",
"marca" => "--",
"tipo" => "--",
"lyr_content" => "aawaw"
];
$newArr = array_filter($arr, function($value) {
return !in_array($value, ['', '--']);
});
通用方法应如下所示:
$filter = function(...$excluded) {
return function ($value) use ($excluded) {
return !in_array($value, $excluded);
};
};
$newArray = array_filter($array, $filter('', '--'));
这种方法是可重用的,因为您不需要对值进行硬编码以正确洞察您的过滤功能。
正如所有其他答案所说,array_filter 是解决此问题的好方法。但是,这是返回一个新数组,实际上并没有修改原始数组。如果这就是您要找的,这可能是一种不同的方法:
// Start infinite loop
while(true){
// Check for value in array
if (($key = array_search('--', $arr)) !== false || ($key = array_search('', $arr)) !== false) {
// Unset the key
unset($arr[$key]);
// Reset array keys
$arr = array_values($arr);
} else {
// No more matches found, break the loop
break;
}
}