我有这样的数组,
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
实现这一目标的最佳方式是什么。
答案 0 :(得分:0)
由于不清楚你需要对阵列进行何种检查和/或操作,这是一个粗鲁,丑陋的解决方案:
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 );
}
}
}
的 eval.in demo 强>
上面的函数就像第一个代码一样,但即使在深度越来越小的数组上也能工作。它使用隐藏第二个参数来打印所有键链。您可以通过向函数添加参数来轻松更改它:
function deepInArray( $array, $checkLevel )
在您喜欢的级别执行检查,或添加代码以返回布尔值而不是打印支票。
__asString()
方法,则脚本会失败; PHP_EOL
标记更改所有<br>
。