2012-01-09 2 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

+1

Я понимаю условие, когда $ myVar равно 4. Но какое отношение существует для (8-> 4) и (10-> 9)? Вы никогда не показываете ключ 9 в списке примеров данных. – DampeS8N

+0

$ myvar = 8 return $ arrVar ['2'], потому что 8 больше 4 и меньше 9 извините за плохой английский ... :) – alvidi

ответ

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"; 

ВЫВОД:

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

Смотрите этот код работает здесь: http://ideone.com/zLDen

+0

Я думаю, что код еще не работает .. потому что, когда я пытаюсь запустить searchArr (12), он не работает. он должен составлять 20%. Пожалуйста, порекомендуйте. thx в любом случае – alvidi

+0

Отредактировал свой ответ и пример кода на: http://ideone.com/zLDen – anubhava

+0

@alvidi: Это сработало для вас? – anubhava

Смежные вопросы