Сравните начало переменной с ключом массива

0

Существует такой массив:

$array1 = array(51=>1.1, 45=>68, 57=>43, 62=>35, 74=>24);

И я хочу проверить, начинается ли значение, которое берется из переменной, с любого из ключей из массива. (переменная проходит правильно, я проверил это)

foreach (array_keys($array1) as $key1) {
    if(preg_match("/^[$rvalue]/", $key1))
    {
        $positive1=true; 
        $fvalue1=$array1[$key1];
    }
    else{
        $positive1=false;
        }
}

Проблема в том, что он запускает весь массив и всегда дает мне значение последнего ключа вместо одного соответствия переменной. Я новичок в регулярном выражении, так что может быть, не знаю. Любая помощь приветствуется.

  • 0
    Почему у вас есть квадратные скобки в регулярном выражении?
  • 0
    @barmar: он хочет сделать набор символов значения, чтобы проверить, начинается ли с них какая-либо клавиша ...
Теги:
arrays

2 ответа

0
Лучший ответ

Кажется, это сложная задача для простой задачи. Как насчет прямого сравнения:

foreach ($array1 as $key1 => $value) {
    if (substr($rvalue, 0, strlen($key1)) == $key1)
    {
        $fvalue1 = $value;
        break;
    }
}

Просто выходите из цикла, когда найдете совпадение.

  • 0
    Это сработало. Спасибо :)
0

Избавьтесь от квадратных скобок в регулярном выражении. Кроме того, вы делаете проверку назад - вы хотите поместить ключи в регулярное выражение и сопоставить это с строкой:

if (preg_match("/^$key1/, $rvalue))

Квадратные скобки в регулярном выражении используются для соответствия одному символу, который соответствует любому из символов в скобке. Таким образом, [51] соответствует 5 или 1, но не соответствует всей строке 51.

Вы также можете объединить все ключи в одно регулярное выражение, используя | в регулярном выражении указать альтернативы:

$alternatives = implode('|', array_keys($array1));
if (preg_match("/^(?:$alternatives)/", $rvalue, $match)) {
    $positive1 = true;
    $fvalue1 = $array1[$match[0]];
} else {
    $positive1 = false;
}
  • 0
    Спасибо за экспликацию :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню