Php 在数组中添加其他值
(这篇文章可能会很长,但请容忍它,并帮助我找到解决方案) 我有一个产品表,有各种参数,主要参数是它的大小和成本。每个产品尺寸分为小、中、大三部分,其成本也根据产品尺寸进一步分为三部分。为此,我创建了另一个表productsize,其中包含每个产品的大小和该大小的成本 prodsize表的小视图为 我有另一个表购物车,它保存用户订购的产品的价值 购物车表的小视图为 现在,我希望将这两个表组合起来,并创建一个数组,该数组显示每个尺寸的大小以及用户为特定产品的每个尺寸订购的数量。为此,我编写了下面的代码Php 在数组中添加其他值,php,mysql,sql,arrays,multidimensional-array,Php,Mysql,Sql,Arrays,Multidimensional Array,(这篇文章可能会很长,但请容忍它,并帮助我找到解决方案) 我有一个产品表,有各种参数,主要参数是它的大小和成本。每个产品尺寸分为小、中、大三部分,其成本也根据产品尺寸进一步分为三部分。为此,我创建了另一个表productsize,其中包含每个产品的大小和该大小的成本 prodsize表的小视图为 我有另一个表购物车,它保存用户订购的产品的价值 购物车表的小视图为 现在,我希望将这两个表组合起来,并创建一个数组,该数组显示每个尺寸的大小以及用户为特定产品的每个尺寸订购的数量。为此,我编写了下面
$sql = "SELECT catname,GROUP_CONCAT(prodsize) as sizes,GROUP_CONCAT(cost) as price,prodname,prodimg,catid,productid FROM productsize where catid='".$catid."' group by productid";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
$pid=$row['productid'];
$rows['catname'] = $row['catname'];
$rows['sizes'] = $row['sizes'];
$rows['price'] = $row['price'];
$rows['prodname'] = $row['prodname'];
$rows['prodimg'] = $row['prodimg'];
$rows['catid'] = $row['catid'];
$rows['productid'] = $row['productid'];
$user_sql = "SELECT group_concat(prodsize) as purchased_size,group_concat(quantity) as purchased_quantity,catid,userid FROM `cart` where userid='$userid' and catid='$catid' and productid='$pid'";
$user_result = mysqli_query($con, $user_sql);
if (mysqli_num_rows($user_result) > 0)
{
while($user_row = mysqli_fetch_assoc($user_result))
{
$rows['purchased_size'] = $user_row['purchased_size'];
$rows['purchased_quantity'] = $user_row['purchased_quantity'];
$rows['userid'] = $user_row['userid'];
}
}
$post_rows[]=$rows;
}
echo "<pre>";
print_r($post_rows);
echo "</pre>";
}
现在我想要的变化是[购买的大小]
和[购买的数量]
。我想要
如果用户没有为特定产品购买任何东西,则[purchased_size]
和[purchased_quantity]
中的值应为0,0,0,如果用户购买了一种尺寸的产品(如壁球),则用户选择中等尺寸,然后选择[purchased_size]和[purchased_quantity]中的其他值应为0,0,如果他订购了2种尺寸,则[purchased_size]和[purchased_quantity]中的第三个值应为0
因此,新阵列应该与下面给出的阵列类似(IMP point,大小和成本的顺序应该是固定的,即小、中、大)
这里的问题在于你做事的方式,最终你会遇到一些麻烦,因为你正在处理从数据库中获取的数据,并重新格式化它以适应用途的细微差别,而不是一开始就以正确的方式存储和检索数据 理想情况下,对于您正在处理的每个产品/尺寸,产品表中应该有单独的产品ID,以便您可以跟踪库存水平等,并处理每个有形项目的购物车/购物篮场景中的数量。。。无论如何,为了直接回答您的问题,此代码会进行特定用途所需的转换:
$purchased_sizes: Array
(
[0] => medium
)
$purchased_quantity: Array
(
[0] => 1
)
$rows[purchased_size]: 0,medium,0
$rows[purchased_quantity]: 0,1,0
我只是不知道你为什么要首先使用GROUP_CONCAT()。在中直接处理非聚合数组似乎更容易PHP@Strawberry你能建议一种我可以使用的方法吗?但看看这有多复杂,你需要认真地重新考虑你的数据存储和总体战略。拿一支笔和一张纸,把它分解成更简单、更符合逻辑的东西。我明白你的意思,它变得越来越复杂。我遇到了一个与我的问题非常相似但也没有答案的问题,如果你能仔细研究一下,我将不胜感激。链接是:@Sam好的,我会的。你介意投票并点击勾号接受我的答案吗?我已经证明它回答了这个问题,非常感谢。为什么这个答案得到了两张反对票?帮助问问题的人,并说明这不是做事情的最佳方式。。。
Array
(
[0] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 130,170,200
[prodname] => pies
[prodimg] =>
[catid] => 2
[productid] => 13
[purchased_size] => small,0,large
[purchased_quantity] => 1,0,1
[userid] => 1
)
[1] => Array
(
[catname] => Main Course
[sizes] => small,medium,large
[price] => 50,90,110
[prodname] => Squash
[prodimg] =>
[catid] => 2
[productid] => 14
[purchased_size] => 0,medium,0
[purchased_quantity] => 0,1,0
[userid] => 1
)
[2] => Array
(
[catname] => Main Course
[sizes] => small,medium
[price] => 70,110
[prodname] => corns
[prodimg] =>
[catid] => 2
[productid] => 15
[purchased_size] => 0,0,0
[purchased_quantity] => 0,0,0
[userid] =>
)
)
$rows['sizes'] = 'small,medium,large';
$available_sizes = explode(',', $rows['sizes']);
$rows['purchased_size'] = 'medium';
$purchased_sizes = explode(',', $rows['purchased_size']);
$rows['purchased_quantity'] = 1;
$purchased_quantity = explode(',', $rows['purchased_quantity']);
echo '<pre>';
echo '$purchased_sizes: ' . print_r($purchased_sizes, true);
echo '</pre>';
echo '<pre>';
echo '$purchased_quantity: ' . print_r($purchased_quantity, true);
echo '</pre>';
$rows['purchased_size'] = '';
$rows['purchased_quantity'] = '';
foreach ($available_sizes as $key => $size) {
$rows['purchased_size'] .= in_array($size, $purchased_sizes) ? $size : 0;
$rows['purchased_quantity'] .= in_array($size, $purchased_sizes) ? array_shift($purchased_quantity) : 0;
if ($key != count($available_sizes)-1) {
$rows['purchased_size'] .= ',';
$rows['purchased_quantity'] .= ',';
}
}
echo '<pre>';
echo '$rows[purchased_size]: ' . print_r($rows['purchased_size'], true);
echo '</pre>';
echo '<pre>';
echo '$rows[purchased_quantity]: ' . print_r($rows['purchased_quantity'], true);
echo '</pre>';
$purchased_sizes: Array
(
[0] => medium
)
$purchased_quantity: Array
(
[0] => 1
)
$rows[purchased_size]: 0,medium,0
$rows[purchased_quantity]: 0,1,0