2014-03-19 53 views
0

我有PHP

一個問題,我有一些陣列

$hp = array('samsung', 'iphone', 'blackberry'); 

$samsung = array(array('Tab', 3,2),array('Note', 4), array('Mini', 5, 6, 8)); 
$iphone = array(array('2G', 2, 3, 6),array('4S', 5), array('5', 2,2), array('3GS', 2,7)); 
$blackberry = array(array('onix', 2),array('curve', 2, 6), array('armstrong', 5), array('gemini', 8. 1)); 

我需要從類型馬力的列表的計數值($ hp),我已經嘗試過但失敗;

for($p=0; $p=count($hp); $p++){ //this ok can get count of $hp = 3 
    for($i=0; $i=count($$hp[$p]); $i++){ //this ok can get count of type from $hp[index], if samsung = 3, if iphone= 4, if blackberry = 4 
     for($u=0; $i=count($$hp[$p][$i]); $u++){ //this fail to get count the next level of hp type, should be if samsung[0] = 3, samsung[1] = 2, samsung[2]=4 
      //any code here 
     } 
    } 
} 

有人可以幫助我?

謝謝

回答

0

A foreach loop在這裏處理會更容易一點,所以你不必處理太多的迭代器/數字 - 而且你可以很容易地分配恰當命名的變量以在每個級別處理,例如,手機,型號,規格,功能等。您也只需要處理一個variable variable這種方式。

試試這個:

foreach($hp as $phone) { 
    echo 'Phone: ' . $phone . PHP_EOL; 
    foreach($$phone as $model) { 
     foreach($model as $value) { 
      echo 'Value: ' . $value . PHP_EOL; 
     } 
    } 
} 

See it working


注:有你$blackberry陣列例子是一個.而不是,

+0

很好..這項工作..非常感謝你,,, – Hans

0

您沒有正確訪問陣列的計數。您需要使用$i而不是$u。另外,您正在用$i=count($$hp[$p][$u]);重寫變量$i。另外,我認爲你正在尋找<而不是=$i=count($$hp[$p][$i]);,其他:

for($p=0; $p<count($hp); $p++){ //this ok can get count of $hp = 3 
    for($i=0; $i<count($$hp[$p]); $i++){ //this ok can get count of type from $hp[index], if samsung = 3, if iphone= 4, if blackberry = 4 
     for($u=0; $u<count($$hp[$p][$i]); $u++){ //this fail to get count the next level of hp type, should be if samsung[0] = 3, samsung[1] = 2, samsung[2]=4 
      //any code here 
     } 
    } 
} 

由於IMSOP建議,您可能需要使用更詳細變量名是不是一個字母,以避免未來的錯誤。

+0

儘管這在技術上是正確的答案,我不能讓自己贊成票一個主張代替變的答案被稱爲'$我'有一個名爲'$ x'而不是重新命名變量到一些實際有意義的東西。 – IMSoP

+0

sory anonymous,實際在我的代碼是不同的,我只是錯了,當我重新打字..但是謝謝 – Hans

+0

@IMSoP我不覺得我需要讓他們改變他們的編碼風格。他們可能會使用註釋而不是詳細的變量名稱或其他名稱。 – Anonymous

1

由於有這麼多的情況下,人們認爲他們需要「變量變量」($$something),你居然想在這裏什麼是關聯數組:現在

$phones = array(
    'samsung' => array(array('Tab', 3,2),array('Note', 4), array('Mini', 5, 6, 8)), 
    'iphone' => array(array('2G', 2, 3, 6),array('4S', 5), array('5', 2,2), array('3GS', 2,7)), 
    'blackberry' = array(array('onix', 2),array('curve', 2, 6), array('armstrong', 5), array('gemini', 8, 1)) 
); 

$hp陣列是不是代表一組變量名稱,它代表了數據結構中的鍵,這使得更有意義。 (如果以後要將這些列表存儲在數據庫或配置文件中,您應該選擇變量名稱而不是程序)

作爲scrowler points out,您還可以使用foreach而不是for循環結束了更可讀的代碼:

$phones_wanted = array('samsung', 'iphone', 'blackberry'); 

foreach($phones_wanted as $phone_key) { 
    echo 'Phone: ', $phone_key, PHP_EOL; 

    // This is the point where you thought you needed a variable variable, but don't 
    foreach($phones[$phone_key] as $model) { 

     echo 'Model: ', $model, PHP_EOL; 
     foreach($model as $value) { 
      echo 'Value: ', $value, PHP_EOL; 
     } 
    } 
} 

請注意,我還用更有意義的變量名。你最初的錯誤是你在兩個不同的循環中使用$i。這是一個更容易閱讀:

for ($model_index=1; $model_index=count($phones_wanted[$phone_index][$model_index]); $model_index++) 

比:

for($i=0; $i=count($$hp[$p][$i]); $i++){ 
+0

謝謝你的回答...實際的代碼是不同的循環,我只是錯誤,當我重新打字SO .. – Hans

+1

@Hans總是測試你的示例代碼是很重要的提供再現實際問題。我堅持我的主要觀點,即「變量變量」幾乎總是一個壞主意。 – IMSoP