2010-07-18 69 views
0

我們給出了一個可以處於4個狀態的給定數組。什麼是最快的方法來檢查給定的數組是否有數組或兩個值?

陣列具有是值:

  • 只有陣列
  • 僅非陣列
  • 兩個陣列和非陣列
  • 陣列沒有值
+1

密鑰不能是數組:* A密鑰可以是一個整數或字符串*(http://php.net/manual/de/language.types.array。 PHP)。你的意思是價值嗎? – 2010-07-18 13:32:01

+0

請添加一個示例數組來解釋您的意思。 – 2010-07-18 13:34:24

+0

是的,你是對的,我的意思是價值 – rsk82 2010-07-18 13:34:36

回答

1

某些預計算:

  1. 只有陣列

    count($array) == $number_of_arrays 
    
  2. 僅非陣列

    function isArray($reducedValue, $currentValue) { 
        // boolean value is converted to 0 or 1 
        return $reducedValue + is_array($currentValue); 
    } 
    
    $number_of_arrays = array_reduce($array, 'isArray', 0); 
    

    然後,不同的狀態可以如下評價3210個

    $number_of_arrays == 0 
    
  3. 兩個數組和非數組鍵

    count($array) != $number_of_arrays 
    
  4. 陣列無鑰匙

    empty($array); 
    

所以你只需要編寫一個返回適當的狀態的功能。

參考:in_arrayarray_reduceempty

2

考慮不是數組鍵只能是數字或字符串值(而不是數組),我想你wa nt知道數組值?

如果是這樣,你將不得不遍歷你的數組,測試每個元素,如果它是一個數組或非數組,跟蹤已發現的內容 - 請參閱is_array函數。

然後,當您測試了所有元素後,您必須測試是否發現數組和/或非數組。


這樣的事情,我想,可能做的伎倆:

$has_array = false; 
$has_non_array = false; 

foreach ($your_array as $element) { 
    if (is_array($element)) { 
     $has_array = true; 
    } else { 
     $has_non_array = true; 
    } 
} 

if ($has_array && $has_non_array) { 
    // both 
} else { 
    if ($has_array) { 
     // only arrays 
    } else { 
     // only non-array 
    } 
} 

(未測試,但這個想法應該有)


的這部分程序應該工作你要求的三個第一點。

爲了測試「數組有沒有價值」,最快的方法是使用循環前的empty()語言構造 - 只有做好循環如果數組不爲空,以避免任何錯誤。

您還可以使用count()函數來計算陣列中元素的數量,並測試它是否等於0,順便說一下。

相關問題