簡體   English   中英

檢查空多維數組,多維數組的特定空值的最佳方法是什么?

[英]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,2name=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 ;否則,如果值為NullFalse0 ,則打印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 )

以便以您喜歡的級別執行檢查,或者添加代碼以返回布爾值而不是打印檢查。

請注意:

  1. 在這兩個示例中,我都不考慮值是對象的情況,因此-如果發生這種情況,如果對象不是__asString()方法,腳本將失敗。
  2. 這兩個示例都旨在在命令行中運行; 如果通過瀏覽器運行它, PHP_EOL使用<br>標記更改所有PHP_EOL可獲得更好的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM