strpos не соответствует - PullRequest
       25

strpos не соответствует

1 голос
/ 19 сентября 2011

Я хочу найти одну строку и получить связанные значения, но при тестировании функции в каждом поисковом слове раз (Title или Would или Post или Ask) отображается (даётся) только один вывод Title,11,11 !!!! как это исправить?

  // test array
  $arr = array('Title,11,11','Would,22,22','Post,55,55','Ask,66,66');
  // define search function that you pass an array and a search string to
  function search($needle,$haystack){
    //loop over each passed in array element
    foreach($haystack as $v){
      // if there is a match at the first position
      if(strpos($needle,$v) == 0)
        // return the current array element
        return $v;
    }
    // otherwise retur false if not found
    return false;
  }
  // test the function
  echo search("Would",$arr);

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

Проблема заключается в strpos. http://php.net/manual/en/function.strpos.php
Стог сена является первым аргументом, а второй аргумент является иглой.
Вы также должны сделать === сравнение для получения 0.

// test array
$arr = array('Title,11,11','Would,22,22','Post,55,55','Ask,66,66');
// define search function that you pass an array and a search string to
function search($needle,$haystack){
  //loop over each passed in array element
  foreach($haystack as $v){
    // if there is a match at the first position
    if(strpos($v,$needle) === 0)
      // return the current array element
      return $v;
  }
  // otherwise retur false if not found
  return false;
}
// test the function
echo search("Would",$arr);
0 голосов
/ 19 сентября 2011

измените эту проверку:

// if there is a match at the first position
if(strpos($needle,$v) == 0)
  // return the current array element
  return $v;

на

// if there is a match at the first position
if(strpos($needle,$v) === 0)
  return $v;

или

// if there is a match anywhere
if(strpos($needle,$v) !== false)
  return $v;

strpos возвращает false , если строка не указана 't найдено, но проверка на false == 0 дает true, потому что php обрабатывает 0 как false.чтобы предотвратить это, вы должны будете использовать оператор === (или !==, в зависимости от того, что именно вы пытаетесь сделать).

0 голосов
/ 19 сентября 2011

Эта функция может возвращать логическое значение FALSE, но также может возвращать и не булево значение, которое оценивается как FALSE, например 0 или "". Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Источник: http://php.net/strpos

...