Я хочу найти одну строку и получить связанные значения, но в тесте функция, в каждом случае поиск слов ( Title
or Would
Or Post
or 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);
Проблема заключается в 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);
Эта функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое оценивается как FALSE, например 0 или «". Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
Источник: http://php.net/strpos
измените эту проверку:
// 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, если строка не найдена, но проверка на false == 0
дает true, потому что php обрабатывает 0
как false
. для предотвращения этого вам придется использовать оператор ===
(или !==
, в зависимости от того, что именно вы пытаетесь сделать).