PHP:如何在已存在数组值的数组中附加数组

时间:2017-04-08 09:53:55

标签: php arrays

我有以下代码:

$counter = $total_amt = 0;
$data = "";

$address = array(
                    'name'       => filter_var($_POST["cust_name"], FILTER_SANITIZE_STRING),
                    'contact'    => filter_var($_POST["cust_contact"], FILTER_SANITIZE_NUMBER_INT),
                    'pincode_id' => filter_var($_POST["cust_pincode"], FILTER_SANITIZE_NUMBER_INT),
                    'address'    => filter_var($_POST["cust_address"], FILTER_SANITIZE_STRING),
                    'landmark'   => filter_var($_POST["cust_landmark"], FILTER_SANITIZE_STRING),
                    'state_id'   => filter_var($_POST["cust_state"], FILTER_SANITIZE_STRING),
                    'city_id'    => filter_var($_POST["cust_city"], FILTER_SANITIZE_STRING)
                );

foreach ($_SESSION["cart_item"] as $item)
    {
        if($counter < 1)
            {
                $data = array(
                                'item'     => $item['id'],
                                'quantity' => $item["quantity"],
                                'price'    => $item["price"]
                             );
            }
        elseif($counter >= 1)
            {
                $data = array(
                                'item'     => $item['id'],
                                'quantity' => $item["quantity"],
                                'price'    => $item["price"]
                             );
                $data[] = $data;
            }

        $total_amt = $total_amt + $item["final_price"];
        $counter ++;
    }

我得到以下代码输出:

Array
  (
    [item] => 3
    [quantity] => 1
    [price] => 810
      [0] => Array
        (
           [item] => 3
           [quantity] => 1
           [price] => 810
        )

 )

我期待这种O / P

Array
  (
      [0] => Array
        (
           [item] => 2
           [quantity] => 2
           [price] => 670
        )
      [1] => Array
        (
           [item] => 3
           [quantity] => 1
           [price] => 810
        )

 )

发生的事情是我使用php会话在购物车中添加了两个产品。我想将该会话变量添加到数组,然后使用serialize函数将其存储在数据库中。但是,我无法以如上所示的数组格式存储变量。

我甚至尝试过array_merge()函数和其他逻辑,但没有人给我这个输出。任何人都可以帮助我摆脱这种逻辑。在此先感谢_ / _

3 个答案:

答案 0 :(得分:1)

像这样修改你的脚本。你也摆脱了无用的代码。

$data = array();
...

foreach ($_SESSION["cart_item"] as $item)
    {

         $data[] = array(
             'item'     => $item['id'],
             'quantity' => $item["quantity"],
             'price'    => $item["price"]
         );
        $total_amt = $total_amt + $item["final_price"];
    }   

答案 1 :(得分:1)

问题在于您正在重复使用变量$data

当你这样做时

$data = array(
                'item'     => $item['id'],
                'quantity' => $item["quantity"],
                'price'    => $item["price"]
             );

它会抛出旧$data数组的数组,并将其替换为此数组。

然后你做:

$data[] = $data;

并将此数组的副本添加到自身。

您可以简单地写一下:

$data[] = array(
                'item'     => $item['id'],
                'quantity' => $item["quantity"],
                'price'    => $item["price"]
             );

向包含此数组的$data添加新元素。

测试if ($counter == 1)也不需要为第一个条目做一些不同的事情。您应该在循环之前将$data初始化为空数组。

$data = array();

答案 2 :(得分:0)

将其更改为:

if($counter < 1)
{
      $data = array(
           'item'     => $item['id'],
           'quantity' => $item["quantity"],
           'price'    => $item["price"]
      );
}
elseif($counter >= 1)
{
     $data = array(
            'item'     => $item['id'],
            'quantity' => $item["quantity"],
            'price'    => $item["price"]
                  );
     $data[] = $data;
}

此:

if ($counter < 1)
{
    $data[] = array(
        'item' => $item['id'],
        'quantity' => $item["quantity"],
        'price' => $item["price"]
    );
}
elseif ($counter >= 1)
{
    $data[] = array(
        'item' => $item['id'],
        'quantity' => $item["quantity"],
        'price' => $item["price"]
    );
}