PHP新手,我有两个数组,我需要遍历array1
和$value = 2
,查看$key
中$key
的任何位置是否有array
匹配uit
{例如fruit1
和fruit 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}}
答案 0 :(得分:3)
所以,基本上,你想检查每个$array1
键是否是$array
的子串,是吗?
正则表达式模式/[$ch]/
可能不正确,因为它意味着:
字面匹配以下列表中的单个字符($,c,h)
此模式将匹配:
我认为你想要的是$pattern = '/' . $ch . '/';
。
在这种情况下,var $ch
会展开,因此$array1
的第一个元素变为/uit/
。
这种模式意味着:
字面上匹配序列
uit
此模式将匹配:
您可以使用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
处的代码