Совпадение со строкой в ​​массиве strpos(): Пустая игла

У меня есть строка из базы данных, которую я хочу сопоставить с массивом, но это приводит к ошибке:

strpos(): пустая игла в строке X

if (!isset($_SESSION['arry'])) {
    $_SESSION['arry'] = array();
}
$imp = 42;
$arrys =  $_SESSION['arry'];

foreach($arrys as $string)
{
  if(strpos($imp, $string) !== false) 
  {
    $pow =1;
    break;
  }
}

if($pow==1){ exit; }

Массив выглядит так:

Array
(
    [0] => 218
    [1] => 219
    [2] =>  218
    [3] => 220
    [4] => 222
    [5] =>  42
    [6] => 223
)

person Sagar Singh    schedule 25.04.2016    source источник
comment
Поменяйте свои аргументы местами, т.е. strpos($string, $imp)   -  person scrowler    schedule 26.04.2016
comment
@RobbieAverill теперь не ищет значение   -  person Sagar Singh    schedule 26.04.2016


Ответы (2)


Вы делаете наоборот, ищете строку в 42, вместо этого ищете

strpos($string, $imp)

ПОПРОБУЙТЕ ЭТО: (обновлено)

<?php

    $_SESSION['arry'] = array(236,235,239,243,246);

$imp =  239;
$arrys =  $_SESSION['arry'];
$arrys = array_unique($arrys);
$pow = "";
print "<pre>";
print_r($arrys);
print "</pre>";
foreach($arrys as $string)
{
if($string == $imp)  {
    $pow = 1; echo "we have".$imp."in array<br/>";
}
else{
    $pow = 0; echo "sorry".$imp."wasn't found in array<br/>";
}
}
?>
person Nirpendra Patel    schedule 25.04.2016
comment
@SagarSingh делает все зацикливание под капотом. он будет перебирать все объекты массива, чтобы найти, соответствует ли какое-либо значение, присвоенное $imp - person Nirpendra Patel; 26.04.2016
comment
когда значение $imp было 42, он сказал, что значение не найдено в сеансе, что совершенно правильно, но когда значение было 300, он сказал, что значение найдено, и когда я повторяю значение, в массиве сеанса не было значения 300 - person Sagar Singh; 26.04.2016
comment
@SagarSingh да, потому что он совпадает по букве, поэтому 30 , 300 , 3000 и все такое совпадет, поэтому лучше используйте foreach. - person Nirpendra Patel; 26.04.2016
comment
@SagarSingh приятно слышать, что я помог тебе, немного обновил. - person Nirpendra Patel; 26.04.2016
comment
все та же проблема. я отправляю значение $imp через ajax в первый раз, когда это работает, во второй раз это не так. - person Sagar Singh; 26.04.2016
comment
Давайте продолжим обсуждение в чате. - person Nirpendra Patel; 26.04.2016

Просто найдите $imp в массиве, не нужно зацикливаться:

$imp = 42;
$arrys =  $_SESSION['arry'];

if(in_array($imp, $arrys)) {
    $pow = 1;
}

Неясно, есть ли пробелы в элементах массива или нет, поэтому вам может понадобиться trim() их:

in_array($imp, array_map('trim', $arrys))

Кроме того, используя strpos(), вы получите ложные срабатывания. Если $imp = 42, то будет соответствовать 422, 142, 999942777 и т. д.

person AbraCadaver    schedule 25.04.2016
comment
тогда как этого избежать? - person Sagar Singh; 26.04.2016
comment
Вы используете правильный инструмент для работы (in_array). Или зациклите, как вы, и используйте if($imp == $string) или if($imp == trim($string)) - person AbraCadaver; 26.04.2016
comment
if(in_array работает для первого значения $imp в другом, которое он показывает найденным, но это значение не существует в сеансе - person Sagar Singh; 26.04.2016