Проверить, содержит ли строка какое-либо значение массива?

$search=array("<",">","!=","<=",">=")
$value="name >= vivek ";

Я хочу проверить, содержит ли $ value какое-либо из значений массива $ search. Я могу узнать, используя foreach и функцию strpos. Не прибегая к использованию foreach, могу ли я найти ответ? Если так, пожалуйста, помогите мне решить эту проблему.

3

Решение

взрываться $value и преобразовать его в массив, а затем использовать array_intersect() Функция в PHP, чтобы проверить, если строка не содержит значение массива. Используйте код ниже

    <?php
$search=array("<",">","!=","<=",">=");
$value='name >= vivek ';
$array = explode(" ",$value);

$p = array_intersect($search,$array);
$errors = array_filter($p);
//Check if the string is not empty
if(!empty($errors)){
echo "The string contains an value of array";
}
else
{
echo "The string does not containe the value of an array";
}

?>

Проверьте код здесь http://sandbox.onlinephpfunctions.com/code/7e65faf808de77036a83e185050d0895553d8211

Надеюсь, это поможет вам

2

Другие решения

Да, но это потребует от вас перестройки кода.

$search = array("<" => 0, ">" => 1,"!=" => 2,"<=" => 3,">=" => 4);

$value = "name => vivek ";

$value = explode(" ", $value);

foreach($value as $val) {
// search the array in O(1) time
if(isset($search[$val])) {
// found a match
}
}
0

Используйте array_map () и array_filter ()

function cube($n)
{
$value="name => vivek ";
return strpos($value, $n);
//return($n * $n * $n);
}

$a = array("<",">","!=","<=",">=");
$value="name => vivek ";

$b = array_map("cube", $a);
print_r($b);

$b = array_filter($b);

print_r($b);
0

$search  = array("<",">","!=","<=",">=");
$value="name => vivek ";
foreach($value as $searchval) {
if(strpos($value,  $searchval) == false)
{
echo "match not found";
}
else
{
echo "match found";
}
}
0

Вот решение с использованием array_reduce:

<?PHP
function array_in_string_callback($carry, $item)
{
list($str, $found) = $carry;
echo $str . " - " . $found . " - " . $str . " - " . $item . "<br/>";
$found |= strpos($str, $item);
return array($str, (boolean) $found);
}

function array_in_string($haystack, $needle)
{
$retVal = array_reduce($needle, "array_in_string_callback", array($haystack, false));
return $retVal[1];
}

$search=array("<",">","!=","<=",">=");
$value="name >= vivek ";

var_dump(array_in_string($value, $search));
?>
0

Моим первым желанием было решить проблему с array_walk () и обратным вызовом следующим образом:

<?php

$search=array("<",">","!=","<=",">=");
$value = "name >= vivek ";

function test($item, $key, $str)
{
if( strpos($str, $item) !== FALSE ) {
echo "$item found in \"$str\"\n";
}
}

array_walk($search, 'test', $value);
// output:
> found in "name >= vivek ">= found in "name >= vivek "

Живая демоверсия: http://3v4l.org/6B0WX

Хотя это решает проблему без цикла foreach, он отвечает на вопрос «что», а не «да / нет». Следующий код прямо отвечает на вопрос и разрешает отвечать на вопросы «что», как показано ниже:

<?php

function test($x)
{
$value="name >= vivek ";
return strpos($value, $x);
}
$search = array("<",">","!=","<=",">=");
$chars = array_filter( $search, "test" );
$count = count($chars);
echo "Are there any search chars? ", $answer = ($count > 0)? 'Yes, as follows: ' : 'No.';
echo join(" ",$chars);

// output:
Are there any search chars? Yes, as follows: > >=

Живая демоверсия: http://3v4l.org/WJQ5c

Если ответ был отрицательным, то вывод «Нет». сопровождается пробелом.

Ключевое отличие этого второго решения по сравнению с первым состоит в том, что в этом случае существует возвращаемый результат, которым можно манипулировать. Если элемент массива соответствует символу в строке, то array_filter добавляет этот элемент в $ chars. Количество элементов нового массива отвечает на вопрос, а сам массив содержит любые совпадения, если кто-то хочет их отобразить.

0
По вопросам рекламы [email protected]