2013-03-06 59 views
1

我創建一個PHP函數,我得到一個問題...返回foreach獲取價值到PHP函數

我不能將foreach值設置爲函數內的變量。

我的代碼是這樣的......

數組:

$baremos_precios = array(
/* [baremo (id)] => [kilos_precio] => [kilos_hasta($key) => precio($value)] */ 
1 => array('kilos_precio' => array(
     /* kilos hasta => precio (sin IVA) */ 
     5 => 6.6, 
     10 => 7.76, 
     20 => 11.03, 
     30 => 14.79, 
     40 => 17.13, 
     50 => 19.46, 
     60 => 21.79, 
     70 => 24.12, 
     80 => 26.46, 
     90 => 28.8, 
     100 => 31.14, 
     120 => 35.8, 
     140 => 40.47, 
     160 => 45.14, 
     180 => 49.83, 
     200 => 54.2, 
     225 => 56.4, 
     250 => 58.59, 
     275 => 63.77, 
     300 => 68.94, 
     325 => 74.1, 
     350 => 79.28, 
     375 => 84.45, 
     400 => 89.62, 
     425 => 94.79, 
     450 => 99.96, 
     475 => 105.12, 
     500 => 108.08, 
     550 => 110.07, 
     600 => 113.08, 
     650 => 117.02, 
     700 => 125.53, 
     750 => 134.03, 
     800 => 142.52, 
     850 => 151.02, 
     900 => 159.53, 
     950 => 168.02, 
     1000 => 176.53, 
     1001 => 0.16 // precio por cada kilo apartir de >1000, ex: 1100kg => 0.16 * 1100 = 176€ + IVA 
     ) 
    ) 

); 

並用foreach的

function obtener_precio($baremo, $kg){ 
    $precio = 0; 
    foreach($baremos_precios AS $key => $value){ 
     if($key == $baremo) { 

      foreach ($value['kilos_precio'] as $secondkey => $secondvalue) { 
       $kilos_array = [$secondkey]; 
       if($kilos_array[0] == $kg){ 
        $precio = $secondvalue; 
       } 
      } 
     } 
    } 
    return $precio; 
} 

好了,現在我想這一個功能.. 。

echo obtener_precio(1, 200); 

從中'我想要得到的結果===> 54.2,但我總是得到0

問題在哪裏?,謝謝!

回答

0

$baremos_precios沒有在側定義的函數

用途:

function obtener_precio($baremos_precios, $baremo, $kg){

,並呼籲它喜歡:

echo obtener_precio($baremos_precios, 1, 200);

======= ================================================== ==

取而代之的是:

$kilos_array = [$secondkey]; 
if($kilos_array[0] == $kg){ 
    $precio = $secondvalue; 
} 

使用:

if($secondkey == $kg){ 
    $precio = $secondvalue; 
} 

更好,我會建議你改變這裏完整的foreach:

foreach ($value['kilos_precio'] as $secondkey => $secondvalue) { 
    $kilos_array = [$secondkey]; 
    if($kilos_array[0] == $kg){ 
     $precio = $secondvalue; 
    } 
} 

到:

if(array_key_exists($kg,$value['kilos_precio'])){ 
    $precio = $value['kilos_precio'][$kg]; 
} 
+0

謝謝,我用$ kilos_array ,, ,因爲當我編譯foreach時,我編寫了 - > echo $ secondvalue ;,然後它返回給我一個數學結果。 :S – Hangover 2013-03-06 13:18:48

+0

@Hangover:Coool:D – 2013-03-06 13:19:27

+0

再次感謝!,每天我學習一些新的方法來做同樣的事:) – Hangover 2013-03-06 13:26:38

2

這是因爲你忘記了將$baremos_precios傳遞給函數本身,沒有它,你不能從函數體內達到它(除非你使用髒的global技巧)。所以,你應該有這樣的:

function obtener_precio($baremos_precios, $baremo, $kg){ 

,並呼籲:

echo obtener_precio($baremos_precios, 1, 200); 
+0

謝謝,我完全忘記了函數的功能...... – Hangover 2013-03-06 13:14:23

0

如果$baremos_precios是一個全局變量做到這一點:

function obtener_precio($baremo, $kg){ 
    global $baremos_precios; 
... 
0
You can pass array as argument 

function obtener_precio($baremos_precios,$baremo, $kg){ 
    //global $baremos_precios; 
    $precio = 0; 
    foreach($baremos_precios AS $key => $value){ 
     if($key == $baremo) { 

      foreach ($value['kilos_precio'] as $secondkey => $secondvalue) { 

       if($secondkey == $kg){ 
        $precio = $secondvalue; 
       } 
      } 
     } 
    } 
    return $precio; 
} 
echo obtener_precio($baremos_precios,1, 200); 

or you can use global variable 
function obtener_precio($baremo, $kg){ 
    global $baremos_precios; 
    $precio = 0; 
    foreach($baremos_precios AS $key => $value){ 
     if($key == $baremo) { 

      foreach ($value['kilos_precio'] as $secondkey => $secondvalue) { 

       if($secondkey == $kg){ 
        $precio = $secondvalue; 
       } 
      } 
     } 
    } 
    return $precio; 
} 
echo obtener_precio(1, 200);