[英]What is best way to check empty multidimensional array, specific empty value of multidimensional array?
我有這樣的數組,
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)如果120
所有value
都為空。
2)如果不是,則檢查鍵1,2
所有值是否為空
3)並且可能是該選項,必須檢查鍵1,2
中name=single_2_120
所在的所有value
是否為空
實現此目標的最佳方法是什么?
由於尚不清楚您必須對數組進行哪種檢查和/或操作,因此這是不禮貌,丑陋的解決方案:
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
;否則,如果值為Null
, False
或0
,則打印EMPTY
的值:您可以在每個數組中添加代碼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 );
}
}
}
上面的函數的作用類似於第一個代碼,但即使在深度較小或較大的數組上也可以使用。 它使用隱藏的第二個參數來打印所有鑰匙鏈。 您可以通過在函數中添加參數來輕松進行更改:
function deepInArray( $array, $checkLevel )
以便以您喜歡的級別執行檢查,或者添加代碼以返回布爾值而不是打印檢查。
__asString()
方法,腳本將失敗。 PHP_EOL
使用<br>
標記更改所有PHP_EOL
可獲得更好的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.