xml elemanlarını php nesne olarak aktarma

Bu konuyu okuyanlar

G.Göktaş

Öğrenci
Katılım
1 Temmuz 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
49
Merhaba,

Öncelikle php yada xml de deneyimim çok az olduğunu belirtmek isterim.

xml dosyasının bir kısmı aşağıda gibi:

<combinations>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Beden</group_name>
<attribute_name>1</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Beden</group_name>
<attribute_name>2</attribute_name>
</combination>

</combinations>


Görüldüğü gibi aynı 'id_combination' değerine sahip ikişer alt öge mevcut. Anı id.lere sahip ögeleri aşağıdaki gibi birleştirmem gerekiyor. Yani 'id_combination' değerleri aynı olanları, devamındaki diğer ögelerden ortak değerlere sahip olanları tek olarak ve farklı değerlere sahip ögeleri aşağıdaki şekilde birleştirmek istiyorum.


no -> 2289
adet -> 4
referans ->K10100.1B
opsiyon -> Renk: Mavi / Beden: 1

no -> 2290
adet -> 20
referans ->K10100.2B
opsiyon -> Renk: Mavi / Beden: 2


Bu değerleri oluşturabilem için gerekli PHP kodu için yardım ederseniz çok sevinirim.

Teşekkür ederim.
 

orcnd

Müdavim
Katılım
13 Ekim 2008
Mesajlar
6,394
Reaksiyon puanı
255
Puanları
63
PHP:
<?php

$xml='<combinations>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Beden</group_name>
<attribute_name>1</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Beden</group_name>
<attribute_name>2</attribute_name>
</combination>

</combinations>';

$dt = new SimpleXMLElement($xml);


$snc=array();
foreach ($dt->combination as $comb) {

   
    if (!isset($snc[(int)$comb->id_combination])) {
        $snc[(int)$comb->id_combination]=(object)array(
            'no'        =>    (int)$comb->id_combination,
            'adet'        =>    (int)$comb->quantity,
            'referans'    =>    (string)$comb->reference,
            'opsiyon'    =>    array()
        );   
    }

    $snc[(int)$comb->id_combination]->opsiyon[]=(string)$comb->group_name . ': ' . (string)$comb->attribute_name;
   
   
}


var_dump($snc);

çıktısı
full
 

G.Göktaş

Öğrenci
Katılım
1 Temmuz 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
49
Çok teşekkür ederim! Yarın ilk fırsatta deneyip sonucu paylaşırım.
 

G.Göktaş

Öğrenci
Katılım
1 Temmuz 2016
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
49
PHP:
<?php

$xml='<combinations>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2289</id_combination>
<quantity>4</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.1B</reference>
<group_name>Beden</group_name>
<attribute_name>1</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Renk</group_name>
<attribute_name>Mavi</attribute_name>
</combination>

<combination>
<id_combination>2290</id_combination>
<quantity>20</quantity>
<unit_price_impact>0.000000</unit_price_impact>
<reference>K10100.2B</reference>
<group_name>Beden</group_name>
<attribute_name>2</attribute_name>
</combination>

</combinations>';

$dt = new SimpleXMLElement($xml);


$snc=array();
foreach ($dt->combination as $comb) {

  
    if (!isset($snc[(int)$comb->id_combination])) {
        $snc[(int)$comb->id_combination]=(object)array(
            'no'        =>    (int)$comb->id_combination,
            'adet'        =>    (int)$comb->quantity,
            'referans'    =>    (string)$comb->reference,
            'opsiyon'    =>    array()
        );  
    }

    $snc[(int)$comb->id_combination]->opsiyon[]=(string)$comb->group_name . ': ' . (string)$comb->attribute_name;
  
  
}


var_dump($snc);

çıktısı
full

Tekrar çok teşekkür ederim! Beni büyük bir zahmetten kurtardınız. :)
 

Son mesajlar

Üst