如何在PHP中删除包含在关联数组中的数组内的所有空值?
How to remove all null values inside an array, which is enclosed within an associate array, in PHP?
我的问题可能看起来很简单,但我尝试了多种技术,none 似乎得出了正确的答案。
我有一个关联数组如下:
$array = array("TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
);
现在我想为相应的关联数组删除数组中的所有空元素。
我的尝试如下:
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}
print_r($array);
但我的输出也重新排列了数组的索引。我的输出如下:
Array
(
[TB1_course] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
[TB1_section] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
[TB1_session] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
)
我想删除索引,以便我的数组中只有两个元素。 "CHEM 2E03" 应该是第 0 个索引,"BIO 1A03" 应该是第一个索引。我正在使用 PHP 5.4.
array_values()
函数保留值并重置数组的索引。以下是针对您的目的的实现:
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key] = array_values($value);
}
}
您可以使用 array_values()
函数重新索引您的数组。
使用 unset()
删除值但保持键不变。
这里最好的解决方案是使用 array_splice()
,这将完全删除该元素。
对于您的代码,它应该是
array_splice($value, $i, 1);
而不是
unset($value[$i]);
您可以使用 function
然后这将使用 array_filter
and array_values
递归过滤和重置您的索引
function array_filter_recursive($input)
{
foreach ($input as &$value)
{
if (is_array($value))
{
$value = array_filter_recursive($value);
}
}
return array_values(array_filter($input));
}
$array = [
"TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
];
print_r(array_filter_recursive($array));
这是 运行 上面的 phpfiddle:http://phpfiddle.org/main/code/cgbj-h10z
资源
1. http://php.net/manual/en/function.array-filter.php
2. http://php.net/manual/en/function.array-values.php
尝试
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}
$arr = array_map('array_values', $array);
print_r($arr);
我的问题可能看起来很简单,但我尝试了多种技术,none 似乎得出了正确的答案。
我有一个关联数组如下:
$array = array("TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
);
现在我想为相应的关联数组删除数组中的所有空元素。
我的尝试如下:
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}
print_r($array);
但我的输出也重新排列了数组的索引。我的输出如下:
Array
(
[TB1_course] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
[TB1_section] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
[TB1_session] => Array
(
[1] => CHEM 2E03
[3] => BIO 1A03
)
)
我想删除索引,以便我的数组中只有两个元素。 "CHEM 2E03" 应该是第 0 个索引,"BIO 1A03" 应该是第一个索引。我正在使用 PHP 5.4.
array_values()
函数保留值并重置数组的索引。以下是针对您的目的的实现:
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key] = array_values($value);
}
}
您可以使用 array_values()
函数重新索引您的数组。
使用 unset()
删除值但保持键不变。
这里最好的解决方案是使用 array_splice()
,这将完全删除该元素。
对于您的代码,它应该是
array_splice($value, $i, 1);
而不是
unset($value[$i]);
您可以使用 function
然后这将使用 array_filter
and array_values
function array_filter_recursive($input)
{
foreach ($input as &$value)
{
if (is_array($value))
{
$value = array_filter_recursive($value);
}
}
return array_values(array_filter($input));
}
$array = [
"TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"),
"TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
];
print_r(array_filter_recursive($array));
这是 运行 上面的 phpfiddle:http://phpfiddle.org/main/code/cgbj-h10z
资源
1. http://php.net/manual/en/function.array-filter.php
2. http://php.net/manual/en/function.array-values.php
尝试
foreach($array as $key=>$value){
for($i=0; $i<sizeof($value);$i++){
if ($value[$i]==null){
unset($value[$i]);
}
$array[$key]=$value;
}
}
$arr = array_map('array_values', $array);
print_r($arr);