首页 > 解决方案 > 如何取消嵌套子数组?

问题描述

我有这个数组:

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
        )
    )
)

我想把它变成这样:

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
)

这是我到目前为止的代码:

$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);

标签: phparrays

解决方案


使用array_merge(),它将结果合并到数组中。(或者干脆使用数组操作符)。您还希望以不同的方式格式化您的$user_result,因此它创建一个数组,而不是子数组:

$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;

就个人而言,我只是将它堆叠到参数数组的末尾,而不是完全形成 2 个数组:

$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'];
}

推荐阅读