2013-11-24 79 views
1

我有兩個數組一個數學:使用一鍵陣列上做另一個陣列

[2] => H 
[3] => O 

和另一個數組是

[0] => H4 
[1] => O 
[2] => H2O 

我要的是這個

[0] => 2H4  //H key is 2 in the first array I want 2 to show beside the H 
[1] => 3O  //O key is 3 in the first array I want 3 to show beside the O 
[2] => 6H2O  //This one contains two elements I want the multiple of the keys (2x3) before the compound 

你如何在PHP中做到這一點?我一直在研究這個問題幾個小時,但仍然不知道如何達到我想要的。提示和方法很受歡迎!

+0

請嘗試一下...你看起來像一種可以... 使用: strpos() - 找到你想要的信, foreach($ array as $ key => value) - 你可以得到2和3以及H和O; $ a。$ b - concatenate –

回答

1

試試這個代碼:

$array1=array(2=>'H',3=>'O'); 
$array2=array(0=>'H4',1=>'O',2=>'H2O'); 
$array3=array(); 
foreach ($array2 as $value1) { 
    $result=array_product(array_flip(array_intersect($array1,str_split($value1)))); 
    $array3[]=$result==1?''.$value1:$result.$value1; 
} 
var_dump($array3); 
+0

@shnisaka爲什麼不檢查?!!!!!! – ops

0

我暗自懷疑你是不是在這裏畫的全貌,但這會做你問什麼了...

$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); 
+0

我沒有畫出整幅圖像,就像你說的那樣:P 這只是編程期間卡住的部分。 – shnisaka