PHP - Diziyi parçalayıp farklı arraylar oluşturma? - R10.net
  • 12-07-2021, 23:06:33
    #1
    Edit: Konu çözüldü, teşekkürler.

    Arakadaşlar merhaba,
    Elimde web servisten gelen bir array kümesi var. Ben bu array kümesini parçalayıp bölümlere ayırıp kullanmak istiyorum fakat yapamadım.
    Gelen veri bir yemek sipariş verisidir. Order arrayının içinde her indis bir sipariş demek. Her indisin içinde de "attributes" adında bir array ile "product" adında birer tane array var.
    Gelen Order blogu :


    Array
    (
        [order] => Array
            (
                [0] => Array
                    (
                        [@attributes] => Array
                            (
                                [Id] => 1195307910
                                [MessageId] => 1499768744
                                [RestaurantName] => AHMET KEBAP, Test
                                [RestaurantCatalog] => postakip
                                [RestaurantCategory] => 8dc225f9-5413-41a4-8ba6-12799e17dab1
                                [CustomerName] => Yunus Polat
                                [CustomerId] => 16710840
                                [CustomerType] => 7
                                [PaymentNote] => Nakit (Nakit ödeme) - Lütfen fiş getiriniz.
                                [OrderTotal] => 22.00
                                [CustomerPhone] => 554 533 00 00
                                [CustomerPhone2] =>
                                [PromoCode] =>
                                [City] => postakip
                                [Region] => Ortaköy
                                [Organization] =>
                                [Address] => Postacılar, 7654/2. Sk., No: 13
                                [AddressDescription] => Test
                                [AddressId] => 1bd678f3f792bdcb7942c74dfdda0a1e
                                [PaymentMethodId] => 1
                                [DeliveryTime] => 2021.07.11 22:21
                                [ChangeInTotal] => 0.00
                                [Currency] => YSM
                                [OrderNote] => Servis (plastik çatal, peçete vs.) İSTEMİYORUM.
                            )
    
                        [product] => Array
                            (
                                [0] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => e7498fc2e8b71499e3b098d715d72bbb
                                                [Name] => Fanta (2,5 L.)
                                                [Price] => 11.00[ListPrice] => 11.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 1
                                                [ParentIndex] => 0
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] =>
                                            )
    
                                    )
    
                                [1] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => c4d0765a0ac923c32cfca242fe77196d
                                                [Name] => Coca-Cola (2,5 L.)
                                                [Price] => 11.00[ListPrice] => 11.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 2
                                                [ParentIndex] => 0
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] =>
                                            )
    
                                    )
    
                            )
    
                    )
    
                [1] => Array
                    (
                        [@attributes] => Array
                            (
                                [Id] => 1195273212
                                [MessageId] => 1499799262
                                [RestaurantName] => AHMET KEBAP, Test
                                [RestaurantCatalog] => postakip
                                [RestaurantCategory] => 8dc225f9-5413-41a4-8ba6-12799e17dab1
                                [CustomerName] => Yunus Polat
                                [CustomerId] => 16710840
                                [CustomerType] => 7
                                [PaymentNote] => Nakit (Nakit ödeme) - Lütfen fiş getiriniz.
                                [OrderTotal] => 80.00
                                [CustomerPhone] => 554 533 00 00
                                [CustomerPhone2] =>
                                [PromoCode] =>
                                [City] => postakip
                                [Region] => Ortaköy
                                [Organization] =>
                                [Address] => Postacılar, 7654/2. Sk., No: 13
                                [AddressDescription] => Test
                                [AddressId] => 1bd678f3f792bdcb7942c74dfdda0a1e
                                [PaymentMethodId] => 1
                                [DeliveryTime] => 2021.07.11 22:26
                                [ChangeInTotal] => 0.00
                                [Currency] => YSM
                                [OrderNote] => Servis (plastik çatal, peçete vs.) İSTEMİYORUM.
                            )
    
                        [product] => Array
                            (
                                [0] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => e67b5c3e7028b21f001f4a1e61071093
                                                [Name] => Menü 2
                                                [Price] => 49.00[ListPrice] => 49.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 1
                                                [ParentIndex] => 0
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] =>
                                            )
    
                                    )
    
                                [1] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => 62b0bdd1f432e343d47525e2beb6ef2d
                                                [Name] => Patates Kızartması (200 gr.)
                                                [Price] => 0.00[ListPrice] => 0.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 2
                                                [ParentIndex] => 1
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] => 9b7f4c7096bdfb3de8fbc43406aa77e5
                                            )
    
                                    )
    
                                [2] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => 5e5f6308360b5f6b8f107e59bd1fa442
                                                [Name] => Coca-Cola Light (1 L.)
                                                [Price] => 0.00[ListPrice] => 0.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 3
                                                [ParentIndex] => 1
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] => 134e531a08a65c331a5431a85c493e40
                                            )
    
                                    )
    
                                [3] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => 1232590bcbcd9375a611d7d120f84e6f
                                                [Name] => Acılı Cajun Baharatlı Tavuk Sepeti Menü
                                                [Price] => 31.00[ListPrice] => 31.00
                                                [Quantity] => 1
                                                [Options] => Ketçap|Mayonez
                                                [OptionIds] => 86d61c2fc713b6c1178e34002bc2c02a,9b349e555d44557452ebb91370648a1b
                                                [OrderIndex] => 4
                                                [ParentIndex] => 0
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] =>
                                            )
    
                                        [option] => Array
                                            (
                                                [0] => Array
                                                    (
                                                        [@attributes] => Array
                                                            (
                                                                [Id] => 86d61c2fc713b6c1178e34002bc2c02a
                                                                [Name] => Ketçap
                                                                [ProductOrderId] => 4
                                                            )
    
                                                    )
    
                                                [1] => Array
                                                    (
                                                        [@attributes] => Array
                                                            (
                                                                [Id] => 9b349e555d44557452ebb91370648a1b
                                                                [Name] => Mayonez
                                                                [ProductOrderId] => 4
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                                [4] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => 62b0bdd1f432e343d47525e2beb6ef2d
                                                [Name] => Patates Kızartması (200 gr.)
                                                [Price] => 0.00[ListPrice] => 0.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 5
                                                [ParentIndex] => 4
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] => bf8badac90c565f847cf1710a858b4aa
                                            )
    
                                    )
    
                                [5] => Array
                                    (
                                        [@attributes] => Array
                                            (
                                                [id] => ea5cdc05b89b862f512c47e41421bdf5
                                                [Name] => Coca-Cola Şekersiz (33 cl.)
                                                [Price] => 0.00[ListPrice] => 0.00
                                                [Quantity] => 1
                                                [Options] =>
                                                [OptionIds] =>
                                                [OrderIndex] => 6
                                                [ParentIndex] => 4
                                                [PromoParentIndex] => 0
                                                [ProductOptionId] => c58394aabf302b78f683eeb8452b4da6
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
    )
    Json formatında gelen veri :


    {"order":[{"@attributes":{"Id":"1195307910","MessageId":"149 9768744","RestaurantName":"Ahmet Kebap, Test","RestaurantCatalog":"postakip","RestaurantCa tegory":"8dc225f9-5413-41a4-8ba6-12799e17dab1","CustomerName":"Yunus Polat","CustomerId":"16710840","CustomerType":"7", "PaymentNote":"Nakit (Nakit u00f6deme) - Lu00fctfen fiu015f getiriniz.","OrderTotal":"22.00","CustomerPhone":" 554 533 40 04","CustomerPhone2":"","PromoCode":"","City":"pos takip","Region":"Ortaku00f6y","Organization":"","A ddress":"Postacu0131lar, 7654/2. Sk., No: 13","AddressDescription":"Test","AddressId":"1bd67 8f3f792bdcb7942c74dfdda0a1e","PaymentMethodId":"1" ,"DeliveryTime":"2021.07.11 22:21","ChangeInTotal":"0.00","Currency":"YSM","Or derNote":"Servis (plastik u00e7atal, peu00e7ete vs.) u0130STEMu0130YORUM."},"product":[{"@attributes":{"id":"e7498fc2e8b71499e3b098d715d7 2bbb","Name":"Fanta (2,5 L.)","Price":"11.00","ListPrice":"11.00","Quantity ":"1","Options":"","OptionIds":"","OrderIndex":"1" ,"ParentIndex":"0","PromoParentIndex":"0","Product OptionId":""}},{"@attributes":{"id":"c4d0765a0ac92 3c32cfca242fe77196d","Name":"Coca-Cola (2,5 L.)","Price":"11.00","ListPrice":"11.00","Quantity ":"1","Options":"","OptionIds":"","OrderIndex":"2" ,"ParentIndex":"0","PromoParentIndex":"0","Product OptionId":""}}]},{"@attributes":{"Id":"1195273212","MessageId":"1 499799262","RestaurantName":"Ahmet Kebap, Test","RestaurantCatalog":"postakip","RestaurantCa tegory":"8dc225f9-5413-41a4-8ba6-12799e17dab1","CustomerName":"Yunus Polat","CustomerId":"16710840","CustomerType":"7", "PaymentNote":"Nakit (Nakit u00f6deme) - Lu00fctfen fiu015f getiriniz.","OrderTotal":"80.00","CustomerPhone":" 554 533 40 04","CustomerPhone2":"","PromoCode":"","City":"pos takip","Region":"Ortaku00f6y","Organization":"","A ddress":"Postacu0131lar, 7654/2. Sk., No: 13","AddressDescription":"Test","AddressId":"1bd67 8f3f792bdcb7942c74dfdda0a1e","PaymentMethodId":"1" ,"DeliveryTime":"2021.07.11 22:26","ChangeInTotal":"0.00","Currency":"YSM","Or derNote":"Servis (plastik u00e7atal, peu00e7ete vs.) u0130STEMu0130YORUM. Kullanu0131cu0131 onayu0131yla bu sipariu015f de geu00e7erli. 10 dakika iu00e7erisinde aynu0131 kullanu0131cu0131ya ait ikinci sipariu015f. Kullanu0131cu0131nu0131n onayu0131yla iletilmiu015ftir. Gu00f6nderim yapabilirsiniz. "},"product":[{"@attributes":{"id":"e67b5c3e7028b21f001f4a1e6107 1093","Name":"Menu00fc 2","Price":"49.00","ListPrice":"49.00","Quantity": "1","Options":"","OptionIds":"","OrderIndex":"1"," ParentIndex":"0","PromoParentIndex":"0","ProductOp tionId":""}},{"@attributes":{"id":"62b0bdd1f432e34 3d47525e2beb6ef2d","Name":"Patates Ku0131zartmasu0131 (200 gr.)","Price":"0.00","ListPrice":"0.00","Quantity" :"1","Options":"","OptionIds":"","OrderIndex":"2", "ParentIndex":"1","PromoParentIndex":"0","ProductO ptionId":"9b7f4c7096bdfb3de8fbc43406aa77e5"}},{"@a ttributes":{"id":"5e5f6308360b5f6b8f107e59bd1fa442 ","Name":"Coca-Cola Light (1 L.)","Price":"0.00","ListPrice":"0.00","Quantity": "1","Options":"","OptionIds":"","OrderIndex":"3"," ParentIndex":"1","PromoParentIndex":"0","ProductOp tionId":"134e531a08a65c331a5431a85c493e40"}},{"@at tributes":{"id":"1232590bcbcd9375a611d7d120f84e6f" ,"Name":"Acu0131lu0131 Cajun Baharatlu0131 Tavuk Sepeti Menu00fc","Price":"31.00","ListPrice":"31.00","Qua ntity":"1","Options":"Ketu00e7ap|Mayonez","OptionI ds":"86d61c2fc713b6c1178e34002bc2c02a,9b349e555d44 557452ebb91370648a1b","OrderIndex":"4","ParentInde x":"0","PromoParentIndex":"0","ProductOptionId":"" },"option":[{"@attributes":{"Id":"86d61c2fc713b6c1178e34002bc2 c02a","Name":"Ketu00e7ap","ProductOrderId":"4"}},{ "@attributes":{"Id":"9b349e555d44557452ebb91370648 a1b","Name":"Mayonez","ProductOrderId":"4"}}]},{"@attributes":{"id":"62b0bdd1f432e343d47525e2be b6ef2d","Name":"Patates Ku0131zartmasu0131 (200 gr.)","Price":"0.00","ListPrice":"0.00","Quantity" :"1","Options":"","OptionIds":"","OrderIndex":"5", "ParentIndex":"4","PromoParentIndex":"0","ProductO ptionId":"bf8badac90c565f847cf1710a858b4aa"}},{"@a ttributes":{"id":"ea5cdc05b89b862f512c47e41421bdf5 ","Name":"Coca-Cola u015eekersiz (33 cl.)","Price":"0.00","ListPrice":"0.00","Quantity" :"1","Options":"","OptionIds":"","OrderIndex":"6", "ParentIndex":"4","PromoParentIndex":"0","ProductO ptionId":"c58394aabf302b78f683eeb8452b4da6"}}]}]}



    Yukarıda ki kodu aşağıdaki formata nasıl çevireceğim yardımlarınızı rica ediyorum.

  • 12-07-2021, 23:51:50
    #4
    QuarkChain adlı üyeden alıntı: mesajı görüntüle
    Veriyi JSON halde içeriğe yazar mısınız
    pardon düzenledim hocam.
  • 13-07-2021, 00:37:01
    #5
    Kart bilgileri vs. geliyor mu bilmiyorum, umarım sizin geliştirmeniz için bu örnek yeterli olacaktır.

    <?php
    // Gelen yapı
    $orderData = json_decode(file_get_contents('test.json'));
    
    $data = array();
    
    foreach ($orderData->order as $order) {
        $detail = $order->{'@attributes'};
    
        $name = trim($detail->CustomerName);
        $last_name = (strpos($name, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '$1', $name);
        $first_name = trim( preg_replace('#'.preg_quote($last_name,'#').'#', '', $name ) );
    
        $input = array(
            'customer' => array(
                'first_name' => $first_name,
                'last_name' => $last_name
            ),
            'order' => array(
                'id' => $detail->Id,
                'detail' => array()
            ),
            'pay' => array(
                'card_name' => NULL
            )
        );
    
        foreach ($order->product as $product) {
            $product = $product->{'@attributes'};
            $input['order']['detail'][] = array(
                'id' => $product->id,
                'name' => $product->Name,
                'price' => $product->Price
            );
        }
    
        array_push($data, $input);
    }
    
    echo json_encode($data);
  • 13-07-2021, 00:46:09
    #6
    QuarkChain adlı üyeden alıntı: mesajı görüntüle
    Kart bilgileri vs. geliyor mu bilmiyorum, umarım sizin geliştirmeniz için bu örnek yeterli olacaktır.

    <?php
    // Gelen yapı
    $orderData = json_decode(file_get_contents('test.json'));
    
    $data = array();
    
    foreach ($orderData->order as $order) {
        $detail = $order->{'@attributes'};
    
        $name = trim($detail->CustomerName);
        $last_name = (strpos($name, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '$1', $name);
        $first_name = trim( preg_replace('#'.preg_quote($last_name,'#').'#', '', $name ) );
    
        $input = array(
            'customer' => array(
                'first_name' => $first_name,
                'last_name' => $last_name
            ),
            'order' => array(
                'id' => $detail->Id,
                'detail' => array()
            ),
            'pay' => array(
                'card_name' => NULL
            )
        );
    
        foreach ($order->product as $product) {
            $product = $product->{'@attributes'};
            $input['order']['detail'][] = array(
                'id' => $product->id,
                'name' => $product->Name,
                'price' => $product->Price
            );
        }
    
        array_push($data, $input);
    }
    
    echo json_encode($data);

    Hocam gerçekten teşekkür ederim ilgi alakanız için. Bir ricam olacak bu çıktıyı orders arrayına atıp 0. indis de 1. sipariş, 1. indis de 2. sipariş şekline çevirebilir miyiz. Önr: orders [0] şeklinde veriyi çektiğimde sadece ilk siparişin customer, order ve pay bilgileri gelsin. Baştan örnek kodu ben eksik istemişim kusura bakmayın lütfen.

    Edit: Zaten istediğim şekilde yapmışsınız hocam, kodu uygulayınca gördüm. Emeğiniz için teşekkür ederim.
  • 13-07-2021, 00:57:06
    #7
    Rica ederim. İyi çalışmalar

    ekoyatirim adlı üyeden alıntı: mesajı görüntüle
    Hocam gerçekten teşekkür ederim ilgi alakanız için. Bir ricam olacak bu çıktıyı orders arrayına atıp 0. indis de 1. sipariş, 1. indis de 2. sipariş şekline çevirebilir miyiz. Önr: orders [0] şeklinde veriyi çektiğimde sadece ilk siparişin customer, order ve pay bilgileri gelsin. Baştan örnek kodu ben eksik istemişim kusura bakmayın lütfen.

    Edit: Zaten istediğim şekilde yapmışsınız hocam, kodu uygulayınca gördüm. Emeğiniz için teşekkür ederim.
R10.net sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.R10.net'i kullanarak çerezleri kullanmamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.