【问题标题】:matching substring in 2nd array [closed]匹配第二个数组中的子字符串[关闭]
【发布时间】:2015-08-30 09:39:24
【问题描述】:

PHP新手,我有两个数组,我需要循环遍历array1$value = 2的位置,看看array$key中是否有$key匹配(例如uitfruit1fruit 4) 中找到,然后将匹配的键值除以 2。

我一直在尝试使用preg_match,但一路上有些奇怪,我不确定我哪里出错了。任何见解将不胜感激。

<?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";
   }}}}?>

【问题讨论】:

  • 所以你只想用fr21替换fruit1
  • 请问您的预期结果是什么?
  • 不清楚你到底想要什么
  • 我已经绑定到编辑以使这一点更清楚。如果没有意义,请告诉我

标签: php arrays regex


【解决方案1】:

假设

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

第一个问题(模式)

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

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

此模式将匹配:

  • hugo
  • helmet
  • c适应

修正模式

我认为你想要类似于$pattern = '/' . $ch . '/'; 的东西。

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

这种模式意味着:

字面上匹配序列uit

此模式将匹配:

  • fruit1
  • fruit4

不需要 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

【讨论】:

  • 谢谢Tivie,这是我遇到的困难(即匹配序列uit,通过匹配子字符串,我现在可以用$newvalue = $value/2 更改值以获得我所需的值集。
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多