在PHP中创建多维数组的问题

问题描述 投票:2回答:2

我想要的是

我想要一个看起来像这样的数组:

Array
(
    [item1] => Array
    (
        [0] => Array
            (
                [paid] => 500
                [nname] => Lastname
                [vname] => Firstname
                [mail] => [email protected]
            )
        [1] => Array
            (
                [paid] => 200
                [nname] => Lastname2
                [vname] => Firstname2
                [mail] => [email protected]
            )

    )
    [item2] => Array
    (
        [0] => Array
            (
                [paid] => 100
                [nname] => Lastname3
                [vname] => Firstname3
                [mail] => [email protected]
            )
)

这是一个数组,我喜欢为一个项目多次付款。我希望将每个付款的所有详细信息保存为数组到项目数组中。

是)我有的

$paidgift = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {              
                $nname = $row['nname'];
                $vname = $row['vname'];
                $paid = $row['paidprice'];
                $mail = $row['mail'];
                $gift = $row['title'];

                if (array_key_exists($gift, $paidgift)) {
                    //Item already exists in $paidgift
                    $paymentdetails = array('paid' => $paid,
                                            'nname' => $nname,
                                            'vname' => $vname,
                                            'mail' => $mail,    
                                            );
                    $paidgift[$gift][] = $paymentdetails;
                } else {
                    //Item doesn't exist in array $paidgift
                    $giftarray = array();
                    $paymentdetails = array('paid' => $paid,
                                            'nname' => $nname,
                                            'vname' => $vname,
                                            'mail' => $mail,    
                                            );

                    array_push($giftarray, $paymentdetails);
                    array_push($paidgift, $giftarray);
                }
}

我的代码的结果

现在我坚持使用我的代码片段。问题是,我的代码不会将现有项付款粘贴到正确的数组中。此代码部分:$paidgift[$gift][] = $paymentdetails;

相反,它总是创建一个新的项目数组,并将paymentdetails数组推送到新创建的数组中。

希望这是了解我的问题的足够信息。请问是否有问题。

php arrays multidimensional-array
2个回答
1
投票

你不需要检查密钥是否存在它是否会在这种情况下创建它,例如,参见此代码完全没问题

 $data = array();
 $data['test'][] = array("name","price","testing");
 $data['test'][] = array("other name","price","testing");

 var_dump($data);

没有必要检查$data['test']是否存在。

所以你不需要上面的所有代码就足够了

 $paidgift = array();

 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // your data
    $data = array('paid' => $row['paidprice'],'nname' => $row['nname'],
                'vname' => $row['vname'], 'mail' => $row['mail']);
     // the gift
    $gift = $row['title'];
    // this is perfectly fine that's it
    $paidgift[$gift][] = $data;
 }

0
投票

这应该工作(未经测试)

如果存在具有密钥$gift(= title)的数组,则将带有支付数据的数组推送到具有该密钥的数组中。

如果没有,它会在$paidgift(数组)中创建一个新条目,使用key $gift进行存储。

$paidgift = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {              
                $gift = $row['title'];

                $paymentdetails = array('paid' => $row['paidprice'],
                                            'nname' => $row['nname'],
                                            'vname' => $row['vname'],
                                            'mail' => $row['mail']    
                                            );


                array_key_exists($gift, $paidgift) ? array_push($paidgift[$gift], $paymentdetails) : $paidgift[$gift] = array($paymentdetails);

}
© www.soinside.com 2019 - 2024. All rights reserved.