匹配第二个数组中的子字符串

时间:2015-06-15 00:22:56

标签: php arrays regex

PHP新手,我有两个数组,我需要遍历array1$value = 2,查看$key$key的任何位置是否有array匹配uit {例如fruit1fruit 4中找到了preg_match,然后将匹配的键值除以2。

我一直在尝试使用<?php $array = array( 'fruit1' => 1, 'hugo' => 2, 'helmet' => 3, 'fruit4' => 4, 'captain' => 5); $array1 = array( 'uit' => 2, 'tes' => 1, 'ain' => 3, ); foreach($array1 as $key=>$value){ if($value==2){ $ch=$key; $pattern = '/[$ch]/'; foreach($array as $key=>$value){ if(preg_match($pattern, $key)){ $newvalue =$value[$key]/2; echo "$key $newvalue"; }}}}?> ,但有些事情在路上很奇怪,而且我不确定我哪里出错了。任何见解都将不胜感激。

{{1}}

1 个答案:

答案 0 :(得分:3)

假设

所以,基本上,你想检查每个$array1键是否是$array的子串,是吗?

第一个问题(模式)

正则表达式模式/[$ch]/可能不正确,因为它意味着:

  

字面匹配以下列表中的单个字符($,c,h)

此模式将匹配:

  • ħ羽后
  • ħ ELMET
  • <强> C aptain

更正模式

我认为你想要的是$pattern = '/' . $ch . '/';

在这种情况下,var $ch会展开,因此$array1的第一个元素变为/uit/

这种模式意味着:

  

字面上匹配序列uit

此模式将匹配:

  • FR的 UIT 1
  • FR的 UIT 4

不需要Preg_match

您可以使用strpos

foreach($array1 as $needle => $val1){
    if($val1 == 2) {
        foreach ($array as $haystack => $val2) {
            if (strpos($haystack, $needle) !== false) {
                echo "$haystack => $val2\n";
            } 
        }
    }
}

请参阅PHP Sandbox

处的代码