Php 跨阵列添加
我以一种非正统的方式构造了项目信息,它存储在三个不同的数组中,并由键关联。我希望通过ItemID对数量求和Php 跨阵列添加,php,Php,我以一种非正统的方式构造了项目信息,它存储在三个不同的数组中,并由键关联。我希望通过ItemID对数量求和 1. Array #1 ItemID $_SESSION["item_id"][] 1 => 1, 2 => 1, 3 =>2 2. Array #2 Size $_SESSION["size"][] 1 => S, 2 => L, 3 =>S
1. Array #1 ItemID
$_SESSION["item_id"][]
1 => 1, 2 => 1, 3 =>2
2. Array #2 Size
$_SESSION["size"][]
1 => S, 2 => L, 3 =>S
3. Array #3 Quantity
$_SESSION["count"][]
1 => 250, 2 =>750, 3=>250
结果如下:
ItemID 1->数量1000
ItemID 2->Quantity 250
有人能帮我做一个函数吗?比方说,您在$\u会话中有以下数组: 注意:下面的答案假设这3个会话值中的数组长度相等 您需要创建新数组来存储结果:
$newArrayResult = array();
之后,您将需要执行for…每个循环以提取当前访问的密钥:
foreach($_SESSION['item_id'] as $key => $value){
//the logic goes here
}
接下来,我们将使用item_id作为$newArrayResult中的数组键。为此,我们需要首先检查它是否已经定义。如果不是,则创建默认值为0的键。我们使用名为array_key_exists的内置函数进行检查。这样,我们将避免遇到未定义的键索引错误
if(!array_key_exists($value, $newArrayResult)){
$newArrayResult[$value] = 0;
}
在我们获得$newArrayResult的密钥后,下一步就是简单地将计数值存储到其中:
$newArrayResult[$value] += $_SESSION['count'][$key];
完成了。打印要测试的结果:
print_r($newArrayResult);
下面是完整的代码,供您复制粘贴。不要忘记先阅读并理解上述流程:
$_SESSION['item_id'] = array(1, 1, 2);
$_SESSION['size'] = array('S', 'L', 'S');
$_SESSION['count'] = array(250, 750, 250);
$newArrayResult = array();
foreach($_SESSION['item_id'] as $key => $value){
if(!array_key_exists($value, $newArrayResult)){
$newArrayResult[$value] = 0;
}
$newArrayResult[$value] += $_SESSION['count'][$key];
}
print_r($newArrayResult);
说明到目前为止你尝试了什么。或者你认为我们会为你建一个吗?不,我没有,但我试过了…可能不值得发布。好的,谢谢。我已经有一段时间没有使用PHP了,我对使用数组不是特别精通。为了检查我的理解,如果我想得到AggregateQuaty。我会这样做:为$I=0$i$value{if$value=$\u SESSION[item_id][$i]{//使用itemID对折扣$aggregateQty=$value;}}}}的聚合计数。您是否尝试过我给您的代码?这是一个独立的脚本。只需复制粘贴到文本文件并运行它。你应该能够掌握它的基本概念。
$_SESSION['item_id'] = array(1, 1, 2);
$_SESSION['size'] = array('S', 'L', 'S');
$_SESSION['count'] = array(250, 750, 250);
$newArrayResult = array();
foreach($_SESSION['item_id'] as $key => $value){
if(!array_key_exists($value, $newArrayResult)){
$newArrayResult[$value] = 0;
}
$newArrayResult[$value] += $_SESSION['count'][$key];
}
print_r($newArrayResult);