2012-01-09 53 views
-1

數組的索引我有這種類型的數組:得到與條件

$arrVar = array(
    0 => array(
     'val'=> 9 
    ), 
    1 => array(
     'val'=> 12, 
    ), 
    2 => array(
     'val'=> 4 
    ), 
); 

我如何返回數組的基於變量$ myVar的指數函數? 例如:

如果$myVar = 4函數將返回$arrVar['2']

如果$myVar = 8函數將返回$arrVar['2']

如果$myVar = 10函數將返回$arrVar['0']

這是我的數組

$arrVar = array(
    0 => array(
     'qty'=>9, 
     'disc'=> 0.15 
    ), 
    1 => array(
     'qty'=>12, 
     'disc'=> 0.20 
    ), 
    2 => array(
     'qty'=>4, 
     'disc'=> 0.10 
    ), 
); 
  • 當顧客一買就是4個產品,他將獲得盤10%
  • 或當顧客一買8個產品,他將獲得盤10%
  • 或當客戶一買就是10個產品,他將獲得盤15%
+5

請clearify邏輯。爲什麼要$ myvar = 8返回$ arrVar ['2']。這對你的樣本沒有任何意義。你有更好的樣本還是現實世界的背景? – Sverker84 2012-01-09 13:13:28

+1

我瞭解$ myVar爲4時的情況。但是(8-> 4)和(10-> 9)有什麼關係?您不會在示例數據列表中顯示密鑰9。 – DampeS8N 2012-01-09 13:15:15

+0

$ myvar = 8返回$ arrVar ['2']因爲8大於4且小於9 對不起英語... :) – alvidi 2012-01-09 13:15:58

回答

1

使用下面的PHP函數來計算你的折扣百分比

function searchArr($needle) { 
    global $arrVar; 
    $arr=array(); 
    foreach($arrVar as $key => $value) { 
     $vals = array_values($value); 
     $arr[$vals[0]] = $vals[1]; 
    } 
    ksort($arr); 
    $prev=0; 
    foreach($arr as $key => $value) { 
     if ($needle < $key) 
     return 100 * ($prev==0 ? $value : $prev); 
     $prev = $value; 
    } 
    return 100 * $prev; 
} 

測試:

echo "Discount: " . searchArr(4) . "%\n"; 
echo "Discount: " . searchArr(8) . "%\n"; 
echo "Discount: " . searchArr(10) . "%\n"; 
echo "Discount: " . searchArr(12) . "%\n"; 

OUTPUT:

Discount: 10% 
Discount: 10% 
Discount: 15% 
Discount: 20% 

查看此代碼的運行位置:http://ideone.com/zLDen

+0

我認爲代碼還沒有工作..因爲當我嘗試運行searchArr(12)時,它不起作用。應該是20%。請指教。 thx – alvidi 2012-01-09 14:22:14

+0

編輯我的答案和代碼示例在:http://ideone.com/zLDen – anubhava 2012-01-09 14:26:56

+0

@alvidi:它是否適合你? – anubhava 2012-01-10 04:17:45