#php
#php
Вопрос:
если у меня есть одна строка
$str = "CD";
затем
он найдет только 3-ю и 4-ю позиции ниже строки массива и извлечет это значение массива,
$arr = ["ABCDE", "BCDEF", "BACDF","ACDLK"];
его вывод будет выглядеть следующим образом,
$arr = ["ABCDE", "BACDF"];
возможно ли это?
Комментарии:
1. возможно ли это? — да.
2. Как вы можете это объяснить? -@NigelRen
3. Что вы сделали до сих пор?
4. Не могли бы вы объяснить, по какой логике вы хотите отфильтровать элементы
$arr
? Для меня это не имеет смысла5. Начните с написания кода, соответствующего значению вашего after (
$str
) в одной строке, как только это сработает, создайте цикл для работы с массивом.
Ответ №1:
Вы можете использовать strpos для достижения того, чего вы хотите, как показано ниже,
$arr = ["ABCDE", "BCDEF", "BACDF", "ACDLK"];
$findme = "CD";
$result = [];
array_walk($arr, function ($mystring) use (amp;$result, $findme) {
// check if string contains and its position index 0 means 1
// and so on
if (strpos($mystring, $findme) == 2) {
$result[] = $mystring;
}
});
print_r($result);
Выходной сигнал
Array
(
[0] => ABCDE
[1] => BACDF
)
Комментарии:
1. Не уверен, что что-то подобное
ABDCDE
должно сработать, но это позволит выбрать его.2. Да, потому что критерии — это не упоминание о проверке других букв, кроме
CD
, верно?3. Я думал, что на компакт-диске должны быть 3-й и 4-й символы, это 4-й и 5-й в приведенном выше примере.
4. О, да. Я внес изменения в ответ, вы можете проверить сейчас.
Ответ №2:
Я тоже пробовал это
$arr = ["ABCDE", "BCDEF", "BACDF", "ACDLK"];
$result = [];
$search = "CD";
function Search($search, $string){
$position = stripos($string, $search, 2);
if ($position == true){
return true;
}
else{
return false;
}
}
foreach($arr as $key){
if(Search($search, $key)){
$result[] = $key;
}
}
print_r($result);
Ответ №3:
При использовании strpos()
вы должны быть осторожны, чтобы искомая строка не находилась в строке перед искомой позицией.
So CDCDE
выдаст 0 strpos()
при поиске CD
и поэтому может отклонить строку из-за того, что она не находится в правильном положении.
Простой альтернативой является использование substr()
для извлечения символов, которые вы хотите проверить, и сравнения их со строкой после. Я параметризовал его так, чтобы его было легко изменить…
$arr = ["ABCDE", "BCDEF", "BACDF", "ACDLK","ABDCDE", "CDCDE"];
$str = "CD";
$strLen = strlen($str);
$position = 2;
$result = [];
foreach( $arr as $string ) {
if (substr($string, $position, $strLen) == $str) {
$result[] = $string;
}
};
print_r($result);
даст…
Array
(
[0] => ABCDE
[1] => BACDF
[2] => CDCDE
)