2012-10-28 79 views
0

我需要幫助來解決在我大學考試時出現的問題。它是這樣的:''PHP中的函數檢查關聯數組中有多少整數,數據不是通過參數傳輸,而是作爲全局變量''傳輸。謝謝!PHP函數檢查關聯數組中有多少個整數

+4

我想他們一定是跟你做1作爲沒有什麼準備這樣做 –

+0

請重新表述的問題 - 因爲它代表它沒有意義。 –

+0

請給出一個示例輸入和輸出。你在哪裏檢查?鑰匙?值?一維?多維?這個問題缺乏細節。 –

回答

0

嘗試以下操作:

<?php 

$a[0] = 1; 
$a[1] = 'aam'; 
$a[2] = 5; 
$a[3] = 'c'; 
$result = count($a); 
$totalints = 0; 

for ($i = 0; $i < $result; $i++) 
{ 
    if (is_int($a[$i])) 
    { 
     $totalints++; 
    } 
} 


echo "Total number of integers: " . $totalints; 

?> 
1

這是一個非常狡猾的問題。首先,PHP不是強類型的,所以「這是一個整數」的概念並不明顯。例如,這個數組中有多少個整數?

$array = array(5, "6", "7abc", 8.0, "9.0xyz", false); 

如果我們嚴格看這些類型,就有一個整數。如果我們比較鬆散(即允許隱式類型強制),則有六個。你可以使用任意函數來確定是否對你的情況有類似的整數。我不覺得單單問題中有足夠的信息來給出一個答案,但我想你的講座中有更多的背景。

另外還有問題的另一個問題。 「關聯數組中有多少個整數」沒有明確的「in」定義,或者說,沒有定義數組的真實結構。考慮以下。

class Foo { 
    public $x; 
    public $y; 
    private $xy; 
    public __construct($x, $y) { $this->x = $x; $this->y = $y; $this->xy = $x * $y; } 
} 

$array = array(
    10, 
    new Foo(3, 4), 
    array(
     array(
      12, 
     ), 
     17, 
     3 
    ) 
); 

你只是考慮頂層還是遞歸下降?如果遞歸下降,還必須掃描內部對象嗎?這些對象中的私有整數是否也在數組中?另外,遞歸下降的算法是否必須檢測並避免週期?對於真正需要什麼,存在着相當大的不確定性。

所以,要回答這個問題,你必須做出一些假設。我假設他們打算讓你用'is_int'函數或等價函數來檢查整數,以確定變量的類型。其次,我假設他們打算讓你只關注關聯數組的頂層。我想這個練習是爲了證明你對'foreach'的熟悉,如何訪問全局變量,以及變量仍然有類型的現實,即使PHP允許你忽略它們。

「數據不是通過參數傳輸,而是作爲全局變量」可能聽起來有點令人困惑,但這隻意味着您的函數不會引用任何參數。相反,它計算全局數組中的整數。在這個例子中,我將調用全局數組'$ globalArray'。

$globalArray = array("k1" => "foo", "k2" => 5, "k3" => "bar", "k4" => 10); 

function num_ints_in_array() { 
    global $globalArray; 
    $num_ints = 0; 
    foreach ($globalArray as $v) { 
     if (is_int($v)) ++$num_ints; 
    } 
    return $num_ints; 
} 

只是一個額外的編輯樂趣:當然有很多方法。這個特殊的功能解決方案令我感到tick。。

function num_ints_in_array() { 
    global $globalArray; 
    return count(array_filter($globalArray, 'is_int')); 
} 
+0

那麼,這個解釋很清楚!確實有很多假設。 –