Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 匹配数组子字符串第n个位置并显示此数组值的字符串_Php - Fatal编程技术网

Php 匹配数组子字符串第n个位置并显示此数组值的字符串

Php 匹配数组子字符串第n个位置并显示此数组值的字符串,php,Php,如果我有一个字符串是 $str = "CD"; 比, 它将只找到数组字符串下面的第3和第4个位置并获取该数组值 $arr = ["ABCDE", "BCDEF", "BACDF","ACDLK"]; 其输出如下所示 $arr = ["ABCDE", "BACDF"]; 有可能吗?您可以使用来实现以下目标 $arr = ["ABCDE", "BCDEF", "BACDF", "ACDLK"]; $findme = "CD"; $result = []; array_walk($arr,

如果我有一个字符串是

$str = "CD";
比, 它将只找到数组字符串下面的第3和第4个位置并获取该数组值

$arr = ["ABCDE", "BCDEF", "BACDF","ACDLK"];
其输出如下所示

$arr = ["ABCDE", "BACDF"];
有可能吗?

您可以使用来实现以下目标

$arr    = ["ABCDE", "BCDEF", "BACDF", "ACDLK"];
$findme = "CD";
$result = [];
array_walk($arr, function ($mystring) use (&$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
)
我也试过了

 $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);
使用
strpos()
时,您必须小心,您要查找的字符串不在您要查找的位置之前的字符串中

因此,在查找
CD
时,
cdcdcde
将为
strpos()
提供0,因此可能会因为字符串位置不正确而拒绝该字符串

一个简单的替代方法是使用
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
)

可能吗是的,你怎么解释呢-@Nigelren到目前为止你做了什么?你能解释一下你想从
$arr
中过滤元素的逻辑吗?通过在单个字符串中写入与after(
$str
)值匹配的代码来启动meStart是没有意义的,一旦这起作用,就创建一个循环来处理数组。不确定类似
ABDCDE
的操作是否有效,但这将选择它。是的,因为除了
CD
,没有提到检查其他字母的标准,是吗?我以为CD必须是第三和第四个字符,在上面的例子中是第四和第五个。哦,是的。我在答案上做了更改,您现在可以查看。