我暗自懷疑你是不是在這裏畫的全貌,但這會做你問什麼了...
$array1 = array(
2 => 'H',
3 => 'O'
);
$array2 = array('H4','O','H2O');
$array1 = array_flip($array1);
foreach ($array2 as &$value) {
switch (true) {
case ((strpos($value,'H')!==false)&&
(strpos($value,'O')!==false) ) :
$value = str_replace('H',$array1['H']*$array1['O'].'H',$value);
break;
case (strpos($value,'H')!==false) :
$value = str_replace('H',$array1['H'].'H',$value);
break;
case (strpos($value,'O')!==false) :
$value = str_replace('O',$array1['O'].'O',$value);
break;
}
}
// $array2 has the new values
print_r($array2);
/* output:
Array
(
[0] => 2H4
[1] => 3O
[2] => 6H2O
)
*/
編輯:
的另一種方法:
array_walk($array2,function(&$v) use ($array1) {
$v = preg_replace_callback('~([HO])(\d+[HO])?~',function($m) use ($array1) {
return (!empty($m[2]))
? (array_search('H',$array1)*array_search('O',$array1).$m[1].$m[2])
: (array_search($m[1],$array1).$m[1]);
},$v);
},$array1);
請嘗試一下...你看起來像一種可以... 使用: strpos() - 找到你想要的信, foreach($ array as $ key => value) - 你可以得到2和3以及H和O; $ a。$ b - concatenate –