-1

I am having trouble to get the target result of an array.

What I am trying to do is:

  • push every variables in $inner_data in every loop.
  • then push that $inner_data to $details_data to create an array inside an array

I hope I explain my idea and problem.

Code

$details_data = array();
$inner_data = array();

for($i=0; $i < $count_selected; $i++){
    $amount[$i] = $quantity[$i] * $price[$i];
    array_push($inner_data, $last_insert_id, $amount[$i], $quantity[$i], $products[$i]);
    array_push($details_data, $inner_data);
}
print_r($details_data); exit;

Target result

$data = array(
        array(
                'last_insert_id' => 10,
                'amount' => 20000,
                'quantity' => 1,
                'product_id' => 1
        ),
        array(
                'last_insert_id' => 10,
                'amount' => 1000,
                'quantity' => 1,
                'product_id' => 2
        )
);

Unexpected Result

Array
(
    [0] => Array
        (
            [0] => 10
            [1] => 20000
            [2] => 1
            [3] => 1
        )

    [1] => Array
        (
            [0] => 10
            [1] => 20000
            [2] => 1
            [3] => 1
            [4] => 10
            [5] => 10000
            [6] => 1
            [7] => 2
        )

)
Emjey23
  • 339
  • 1
  • 4
  • 16

3 Answers3

1
for($i=0; $i < $count_selected; $i++){
    $amount[$i] = $quantity[$i] * $price[$i];

    $inner_data=array(
      'last_insert_id'=>$last_insert_id, 
      'amount'=>$amount[$i], 
      'quantity'=>$quantity[$i], 
      'product_id'=>$products[$i]
    );
    array_push($details_data, $inner_data);
}
Schien
  • 3,855
  • 1
  • 16
  • 29
1

Link for your reference

<?php

    $details_data = array();

    /* do not set it as a global vari OR clear it when you re-use it */
    //$inner_data = array();

    $last_insert_id = 10;
    $amount = [20000, 1000];
    $quantity = [110, 220];
    $price = [32, 64];
    $products = [001, 002];

    for($i=0; $i < 2; $i++){
        $amount[$i] = $quantity[$i] * $price[$i];

        /* set it here as a local vari, thus it won't accumulate the result */
        $inner_data = array();

        //array_push($inner_data, $last_insert_id, $amount[$i], $quantity[$i], $products[$i]);
        $inner_data['last_insert_id'] = $last_insert_id;
        $inner_data['amount'] = $amount[$i];
        $inner_data['quantity'] = $quantity[$i];
        $inner_data['product_id'] = $products[$i];
        array_push($details_data, $inner_data);
    }

    echo "<pre>";
    print_r($details_data); exit;

    echo "</pre>";

?>
CK Wong
  • 68
  • 6
0
array_push($details_data, 
array('last_insert_id'=>$last_insert_id, 'amount'=>$amount[$i], 'quantity'=>$quantity[$i], 'product_id'=>$products[$i])
);

Try to push an array directly to details_data.

Wils
  • 1,178
  • 8
  • 24