我有这样的数组,
Array
(
[120] => Array
(
[1] => Array
(
[0] => Array
(
[name] => quantity_1_120
[value] =>
)
[1] => Array
(
[name] => single_1_120
[value] =>
)
)
[2] => Array
(
[0] => Array
(
[name] => quantity_2_120
[value] =>
)
[1] => Array
(
[name] => single_2_120
[value] =>
)
)
)
现在,我想检查一下
1)如果
value
的所有120
是否为空
2)如果不是,则检查键中所有值是否为空
1,2
3)可能是这个完成了,必须检查所有
value
是否是空的,而不是关键name=single_2_120
中的
1,2
实现这一目标的最佳方法是什么?
由于不清楚你必须对数组进行什么样的检查和/或操作,这是粗鲁、丑陋的解决方案:
foreach( $array as $mainKey => $mainVal )
{
if( !$mainVal )
{ echo "[$mainKey] EMPTY".PHP_EOL; }
elseif( !is_array($mainVal) )
{ echo "[$mainKey] $mainVal".PHP_EOL; }
else
{
foreach( $mainVal as $mediumKey => $mediumVal )
{
if( !$mediumVal )
{ echo "[$mainKey][$mediumKey] EMPTY".PHP_EOL; }
elseif( !is_array($mediumVal) )
{ echo "[$mainKey][$mediumKey] $mediumVal".PHP_EOL; }
else
{
foreach( $mediumVal as $mediumKey1 => $mediumVal1 )
{
if( !$mediumVal1 )
{ echo "[$mainKey][$mediumKey][$mediumKey1] EMPTY".PHP_EOL; }
elseif( !is_array($mediumVal1) )
{ echo "[$mainKey][$mediumKey][$mediumKey1] $mediumVal1".PHP_EOL; }
else
{
foreach( $mediumVal1 as $key => $val )
{
if( !$val )
{ echo "[$mainKey][$mediumKey][$mediumKey1][$key] EMPTY".PHP_EOL; }
elseif( !is_array($val) )
{ echo "[$mainKey][$mediumKey][$mediumKey1][$key] $val".PHP_EOL; }
else
{ echo "[$mainKey][$mediumKey][$mediumKey1][$key] array({count($val)})".PHP_EOL; }
}
}
}
}
}
}
}
它执行4个嵌套
foreach
,一个用于数组的每一层,并测试内容:如果它是一个数组,则执行下一个foreach
,否则如果值为EMPTY
,则打印Null
的值,False
或 0
:您可以在每个 if
/else
语句中添加您的代码。
single_x_120
的检查作为更深层次(mediumVal1
)执行。
但是还有一个像这样的递归函数的更好的解决方案:
function deepInArray( $array )
{
if( 1<func_num_args() )
{ $chain = array_merge(func_get_arg(func_num_args()-1), array(key($array))); }
else $chain = array( key($array) );
$curChain = array_slice( $chain,0,count($chain)-1 );
foreach( $array as $key => $val )
{
if( !$val )
{ echo (($curChain)?'['.implode('][',$curChain).']':'')."[$key] EMPTY".PHP_EOL; }
elseif( !is_array($val) )
{ echo (($curChain)?'['.implode('][',$curChain).']':'')."[$key] $val".PHP_EOL; }
else
{
deepInArray( $val, $chain );
}
}
}
上面的函数就像第一个代码,但即使在深度更少或更多的数组上也能工作。它使用 hidden 第二个参数来打印所有钥匙链。您可以通过添加,即函数的参数来轻松更改它:
function deepInArray( $array, $checkLevel )
以您喜欢的级别执行检查,或添加代码以返回布尔值而不是打印检查。