строка, соответствующая n-й позиции подстроки массива и отображающая значение этого массива

#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
)