2014-12-26 3 views
2

Я хочуПроблем создание многомерного массива в PHP

Я хочу, чтобы массив вида:

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;

Вместо этого он всегда создает новый массив элементов и толкает массив paymentsdetails во вновь созданный массив.

Надеюсь, этого достаточно, чтобы понять мою проблему. Пожалуйста, спросите, не ясно ли что-то.

+0

'$ paidgift [$ подарок] []' это не будет работать. Вам нужно указать 'key' или использовать' array_push() ' – Mouser

ответ

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

это абсолютно правильно! Спасибо. вы сохранили мне несколько строк кода. Он действительно работает без тестирования, если массив элементов уже существует. – ismaelw

0

Это должно работать (непроверенные)

Если массив с ключом $gift (= название) существует, он выталкивает массив с данными платежных в массив с помощью этого ключа.

Если нет, он создает новую запись в $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); 

} 
+0

. Я должен заметить, что название не очень хороший ключ. Если ваш заголовок уникален, вы можете отметить этот комментарий как никогда не написанный. Кроме того, вам нужно предоставить уникальные идентификаторы. – Mouser