-1

I have this array:

Array 
(
    [key] => 123456
    [siteNumber] => 123456
    [useBalanceOnly] => 80
    [coupon] => free50
    [deliveryAddress.countryId] => IN
    [deliveryAddress.state] => GUJ
    [deliveryAddress.city] => Ahmedabad
    [deliveryAddress.company] => abc
    [deliveryAddress.address] => abc
    [deliveryAddress.address2] => abc
    [deliveryAddress.postcode] => 123
    [deliveryAddress.receiver] => 1
    [deliveryAddress.telephone] => 123456789
    [deliveryAddress.shippingWayId] => 2
    [0] => Array
    (
        [0] => Array
        (
            [items.1.itemNo] => 51
            [items.1.qty] => 8
        )

        [1] => Array
        (
            [items.2.itemNo] => 52
            [items.2.qty] => 2
        )
    )
)

And I want to turn it into this:

Array
(
    [key] => 123456
    [siteNumber] => 123456
    [useBalanceOnly] => 80
    [coupon] => free50
    [deliveryAddress.countryId] => IN
    [deliveryAddress.state] => GUJ
    [deliveryAddress.city] => Ahmedabad
    [deliveryAddress.company] => abc
    [deliveryAddress.address] => abc
    [deliveryAddress.address2] => abc
    [deliveryAddress.postcode] => 123
    [deliveryAddress.receiver] => 1
    [deliveryAddress.telephone] => 123456789
    [deliveryAddress.shippingWayId] => 2
    [items.1.itemNo] => 51
    [items.1.qty] => 8
    [items.2.itemNo] => 52
    [items.2.qty] => 2
)

This is the code I have so far:

$p = $db->query("select * from table");
$no = 0;
while($row = $p->fetch_array()){
    $no = $no +1;
    $user_result[] = array(
        "items.".$no.".itemNo" => $row['itemno'],
        "items.".$no.".qty" => $row['itemqty']
    );
}

$parameters = array(
    'key' => 123456,
    'siteNumber' => '123456',
    'useBalanceOnly' => '80',
    'coupon' => 'free50',
    'deliveryAddress.countryId' => 'IN',
    'deliveryAddress.state' => 'GUJ',
    'deliveryAddress.city' => 'Ahmedabad',
    'deliveryAddress.company' =>'abc',
    'deliveryAddress.address' => 'abc',
    'deliveryAddress.address2' => 'abc',
    'deliveryAddress.postcode' => '123',
    'deliveryAddress.receiver' => '1',
    'deliveryAddress.telephone' => '123456789',
    'deliveryAddress.shippingWayId' => '2',
    $user_result
);

print_r($parameters);
Scoots
  • 3,048
  • 2
  • 21
  • 33
  • Welcome to Stack Overflow! Take a moment to read through the [editing help](//stackoverflow.com/editing-help) in the help center. Formatting on Stack Overflow is different than other sites. The better your post looks, the easier it is for others to read and understand it. – Blue Jul 30 '18 at 13:04
  • [array_merge()](http://php.net/manual/en/function.array-merge.php) is what you want. – Jeff Jul 30 '18 at 13:06
  • Looking at current output and desired output, it doesn't look like you need to unset anything. Your question seems to be a duplicate of [How to Flatten a Multidimensional Array?](https://stackoverflow.com/questions/1319903/how-to-flatten-a-multidimensional-array) – Nima Jul 31 '18 at 12:50

4 Answers4

1

Use array_merge(), which will merge the results into the array. (Or simply use array operators). You also want to format your $user_result differently, so it makes one array, and not subarrays:

$p = $db->query("select * from table");
$no = 0;
$user_result = array();
while($row = $p->fetch_array()){
    $no = $no +1;
    $user_result["items.".$no.".itemNo"] = $row['itemno'];
    $user_result["items.".$no.".qty"] = $row['itemqty'];
}
$parameters = array(
    'key'       => 123456,
    'siteNumber' => '123456',
    'useBalanceOnly'    => '80',
    'coupon'      => 'free50',
    'deliveryAddress.countryId' => 'IN',
    'deliveryAddress.state' => 'GUJ',
    'deliveryAddress.city' => 'Ahmedabad',
    'deliveryAddress.company' =>'abc',
    'deliveryAddress.address' => 'abc',
    'deliveryAddress.address2' => 'abc',
    'deliveryAddress.postcode' => '123',
    'deliveryAddress.receiver' => '1',
    'deliveryAddress.telephone' => '123456789',
    'deliveryAddress.shippingWayId' => '2',
) + $user_result;

Personally, I would just stack it onto the end of the parameters array, instead of forming 2 arrays at all:

$parameters = [
    'key'                           => 123456,
    'siteNumber'                    => '123456',
    'useBalanceOnly'                => '80',
    'coupon'                        => 'free50',
    'deliveryAddress.countryId'     => 'IN',
    'deliveryAddress.state'         => 'GUJ',
    'deliveryAddress.city'          => 'Ahmedabad',
    'deliveryAddress.company'       => 'abc',
    'deliveryAddress.address'       => 'abc',
    'deliveryAddress.address2'      => 'abc',
    'deliveryAddress.postcode'      => '123',
    'deliveryAddress.receiver'      => '1',
    'deliveryAddress.telephone'     => '123456789',
    'deliveryAddress.shippingWayId' => '2',
];

$p = $db->query("select * from table");
$no = 0;
while($row = $p->fetch_array()){
    $no++; // Or $no += 1; Or $no = $no + 1;
    $parameters["items.{$no}.itemNo"] = $row['itemno'];
    $parameters["items.{$no}.qty"]    = $row['itemqty'];
}
Blue
  • 22,608
  • 7
  • 62
  • 92
  • he would still need to setup $user_result different – Jeff Jul 30 '18 at 13:09
  • I was about writing kinda the same answer, you were quicker (because I was thinking about the right way to handle $user_result..)! – Jeff Jul 30 '18 at 13:12
-1

Actually you made the $user_result array as an item in the big array. You need to merge them instead.

Have you tried array merge?

array_merge($parameters,$user_result);
Sudeep nayak
  • 418
  • 1
  • 5
  • 12
-1

If you want your final result to be a flat (one dimensional) array, define $parameters array before fetching results, the instead of adding results to a separate array and appending that array to $parameters, just add new data to $parmameters:

$parameters = array(
        'key'       => 123456,
        // rest of $parameters array
        'deliveryAddress.shippingWayId' => '2',
        );
$no = 0;
while($row = $p->fetch_array()){
    $no = $no +1;
    //do not add new array to the $user_data, simply create new keys
    $parameters ["items.{$no}.itemNo"] = $row['itemno'];
    $parameters ["items.{$no}.qty"] = $row['itemqty'];

}

Alternatively you can build another array like $user_data but avoid making it a multi dimensional array (i.e do not add a new array to $user_data for each row, because you're creating unique indexes anyway) and then use array_merge or + operator to merge them.

But if you really need $user_data to be a multi dimensional array (the way it is right now in your code, for example if the only use for that array is not to be appended to $parameters and you'll need it as is) you can try to flatten it then merge it with $parameters.

Nima
  • 3,309
  • 6
  • 27
  • 44
-2
if you want itemno and itemqtty in aequence try this one:

$parameters = array(
    'key' => 123456,
    'siteNumber' => '123456',
    'useBalanceOnly' => '80',
    'coupon' => 'free50',
    'deliveryAddress.countryId' => 'IN',
    'deliveryAddress.state' => 'GUJ',
    'deliveryAddress.city' => 'Ahmedabad',
    'deliveryAddress.company' =>'abc',
    'deliveryAddress.address' => 'abc',
    'deliveryAddress.address2' => 'abc',
    'deliveryAddress.postcode' => '123',
    'deliveryAddress.receiver' => '1',
    'deliveryAddress.telephone' => '123456789',
    'deliveryAddress.shippingWayId' => '2',
);


$p = $db->query("select * from table");    
$no=0;
while($row = $p->fetch_array())
{
    $no++; 
    $parameters["items.{$no}.itemNo"] => $row['itemno'],       
}

$no1 = 0;
while($row1 = $p->fetch_array())
{
    $no1++;
    $parameters["items.{$no1}.itemNo"] => $row1['itemqty']
}
print_r($parameters);