gpt4 book ai didi

php - 添加和组合基于化学元素的数组

转载 作者:行者123 更新时间:2023-12-02 03:40:53 24 4
gpt4 key购买 nike

我创建了一个网站,其中有两个输入,一个用于 react 物,另一个用于产物。提交两个字符串后,我想输出 react 物和产物之间的平衡化学方程式。

例如,如果有人输入 react 物中的 H2 + O2 和产物中的 H2O。我希望结果为 2H2 + O2 -> 2H2O

我这样做是为了提高我使用数组的技能。但现在我停了下来,不知道该怎么做才能实现我想要的。

我已经得到它来返回这个数组(对于产品):

[0] => 2 
[1] => 2
// [0] is the H, [1] is the O.

但是,当我尝试输入类似 CH6 + CH12 的内容时,它将以这种方式返回:

[0] => 1 
[1] => 6
[2] => 12
// [0] is the C, [1] is the H6, [2] is the H12

我真正想要的是:

[0] => 1 
[1] => 18
// [0] is the C, [1] is the H

我目前的代码是这样的:

//returns H2 + H2O
$reactions = $_GET['reactions'];
//returns H2 H2O
$reactionsnospace = str_replace('+', '', $reactions);
//returns array(H2,H2O)
$reactionsarray = explode("+",$reactions);
//returns array(H2,H2,O)
$reactionsplitarray = splitAtUpperCase($reactionsnospace);

//returns the repeated number element H2 x 2 and O x 1
$reactioncountrepeatedelements = array_count_values($reactionsplitarray);
//returns the elements name with no repetition 2 and 1 ( 2 and )
$reactionkeys = array_keys($reactioncountrepeatedelements);
foreach($reactionkeys as &$item) {
$item = preg_replace('/\D/', '', $item);
if(empty($item))
{$item = "1";}
}
//returns the elements repetition number only
$reactionvalues = array_values($reactioncountrepeatedelements);


$d = array_map(function ($a1, $a2) { return $a1 * $a2; }, $reactionkeys , $reactionvalues);
print_r($d);

我需要建议来改进我的代码,解决我当前的问题,以及可以用来达到平衡化学方程式的最终目标的方法。使用数组是个好主意吗?有没有更好的办法?

如果您不喜欢阅读以上所有内容,请阅读此内容:

我有这个数组:

Array ( [0] => C [1] => H6 [2] => C [3] => H12 [4] => Cl2) 

我想要实现的是:

Array ( [0] => C2 [1] => H18 [2] => Cl2) 

最佳答案

从最后一段开始,如果你只是想求和原子的计数,那么你可以使用这个函数。前半部分创建一个二维数组来存储每个原子类型和计数,然后后半部分将它们相加并将字母重新加入数字。

function addAtoms($arr){
$newArr = array();
foreach($arr as $v){
//if the entire value is alpha, assign a subscript of 1
if(ctype_alpha($v)){
$newArr[$v][] = 1;
}
//if the first 2 letters are alpha, it is an atom with 2 letters
elseif(ctype_alpha(substr($v, 0, 2))){
$newArr[substr($v, 0, 2)][] = substr($v, 2);
}
//atoms with only 1 letter like H, B, N, O, F, P, S etc
else{
$newArr[substr($v, 0, 1)][] = substr($v, 1);
}
}

//Sum the values of the 2nd level array and concatenate to the key
$new2 = array();
foreach($newArr as $k => $v){
$new2[] = $k.array_sum($v);
}
return $new2;
}

输入:

$test = array("C", "H6" ,"C" ,"H12" ,"Cl2");
print_r(addAtoms($test));

会给你想要的数组:

Array ( [0] => C2 [1] => H18 [2] => Cl2 )

编辑

如果您可能有超过 1 或 2 个字符,您可以替换:

//if the first 2 letters are alpha, it is an atom with 2 letters
elseif(ctype_alpha(substr($v, 0, 2))){
$newArr[substr($v, 0, 2)][] = substr($v, 2);
}
//atoms with only 1 letter like H, B, N, O, F, P, S etc
else{
$newArr[substr($v, 0, 1)][] = substr($v, 1);
}

不太具体的:

else{
$newArr[str_replace(range(0,9),'',$v)][]
= str_ireplace(range('a','z'),'',$v);
}

关于php - 添加和组合基于化学元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com