2017-05-04 43 views
0

我試圖用foreach循環中的變量$numberOfFoods更新每個鍵在關聯數組中保存的元素數。這裏是我的代碼:如何計算每個鍵在PHP中的關聯數組中保留的元素數?

$foodsArray = array (
     'France' => ['Souffle' , 'Baguette' , 'Fois gras'], 
     'England' => ['Bangers and mash' , 'Tea and biscuits'], 
     'America' => ['Hamburger', 'Steak and Eggs', 'Texas chili'] 
    ); 
    $countriesByCuisine = array();  

    foreach ($foodsArray as $originCountry => $countryAssocFood) { 
     $numberOfFoods = count(array_values($foodsArray)); 
     for ($countryAssocFoodIndex = 0; $countryAssocFoodIndex < $numberOfFoods; $countryAssocFoodIndex++) { 
      $countriesByCuisine[$countryAssocFood[$countryAssocFoodIndex]] = $originCountry; 
     } 
    } 

    foreach (array_keys($countriesByCuisine) as $foodFromCountry) { 
     echo $foodFromCountry . ', From ' . $countriesByCuisine[$foodFromCountry] . '. '; 
    } 

正因爲如此,這個代碼只需將$numberOfFoods變量設置爲整數3,而不是更新的數量,以反映當前的密鑰保存值的數量。我的這個代碼的總體目標是學習如何轉換數組,使得這些值成爲新數組中的鍵,並且這些鍵將其前一個鍵保存爲值。請原諒我亂七八糟的代碼,因爲我對編程和PHP很新穎。

+0

'array_flip'會爲你做 –

+0

你能給你想要什麼結果的例子看起來像? – Phil

+0

我的原始目標(使$'numberOfFoods = count(array_values($ countryAssocFood));'的建議符合我的原始目標,這將改變$ foodsArray = array(''''Souffle','Baguette' ,'Fois gras'], 'England'=> ['Bangers and mash','Tea and biscuits'], 'America'=> ['Hamburger','Steak and Eggs','Texas chili']' into'$ countriesByCuisine = array('Souffle'=>'France','Baguette'=>'France');'等等''以前的所有值'$ foodsArray'。 – theotheransel

回答

0

@Robbie Averill約爲array_flip,以實現翻轉鍵和值的「總體目標」。

有多種,更有效,方法來解決當前的代碼,最好的一個很可能是array_map,但我也想向您提供爲什麼你當前的代碼失敗:

的問題是,你是計數$foodsArray每次迭代(它總是等於3),而不是計數$countryAssocFood

$numberOfFoods = count(array_values($countryAssocFood));

+0

他已經知道關於計數的問題 – Chinito

+0

這就是而不是我們從他解釋問題的方式中所理解的,他首先說出他想做什麼(用每個鍵所保存的元素數量更新foreach循環中的變量$ numberOfFoods),然後顯示代碼,然後說目前的(這個代碼只是設置$ numberOfFoods變量e到整數3)。 在我看來,固定計數是他想要的。如果不是,他總是可以忽略我的答案。 – Growiel

+1

:D我們不要他想要的 – Chinito

相關問題