• 13-11-2022, 21:25:18
    #1
    Merhabalar,

    Aşağıdaki şekilde bir dizim var.

    $data = [
        'channel' =>
            [
                'item' => [
                    ['product_id' => '1', 'product_name' => 'abc',],
                    ['product_id' => '2', 'product_name' => 'def',]
                ]
            ]
    ];
    
    // Ayrıca bu bilgide geliyor
    $container = ["channel", "item"];
    Dizideki ürünleri listelemek için aşağıdaki kodu kullanıyoruz.

    $products = $data['channel']['item'];
    Fakat benim bu örneği dinamikleştirmem lazım. Yani şuan channel->item altında ürünler gelirken, bir başka örnekte datas->products olarak veriler gelecek ve benim bu sefer aşağıdaki şekilde erişmem gerekecek.
    Bu veri yeri gelecek 3 alt dizinde de olabilecek (channel->items->item), yeri gelecek tek dizinde de listelenecek (items).

    $products = $data['datas']['products'];
    $products = $data['channel']['items']['item'];
    $products = $data['items'];
    Bu arada bu $data dizisi değiştikçe hangi dizi altındaki veriyi alacağımı ayrı bi alanda alıyorum. Yani en üsteki $data verisi gelirken $container değişkeninde channel->item altından bakacağımı biliyorum. Fakat bunu nasıl yapmam konusunda bir türlü mantık kuramadım.

    Şöyle bi kullanım olsa çok işime yarayacaktı ama yok tabi

    $products = $data["channel.item"];
  • 13-11-2022, 21:33:05
    #2
    Doğru mu anladım ? Sen data içerisindeki tüm verileri tek bir yerde listelemek istiyorsun ?
  • 13-11-2022, 21:37:38
    #3
    Evet tek yerden olacak. $data değişkeni kullanıcıya göre değişiklik gösterecek.
    Bu veriler rss ile gelecek ve her site kendine göre rss yapısı barındırdığı için benimde bunu tek yerden çözmem gerek.
  • 13-11-2022, 21:44:13
    #4
    $data = [
        'channel' =>
            [
                'item' => [
                    ['product_id' => '1', 'product_name' => 'abc',],
                    ['product_id' => '2', 'product_name' => 'def',]
                ];
    function datam($data){
    $keys=array_keys($data);
    return $data[$keys[0]][$keys[1]];
    }
    $products= datam($data);
    şu şekilde bir fonksiyon işini görebilir sanırım
  • 13-11-2022, 21:46:30
    #5
    Eğer tüm $data verisi 2. alt dizin altında geleceği kesin olsa evet işimi görebilirdi, fakat kaçıncı da geleceği belli değil. 1 alt dizinde de gelebilir 3 de

    Teşekkürler yanıtın için
  • 13-11-2022, 21:54:09
    #6
    $data = [
    
        'channel' =>
    
            [
    
                'item' => [
    
                    ['product_id' => '1', 'product_name' => 'abc',],
    
                    ['product_id' => '2', 'product_name' => 'def',]
    
                ]
      ]
     ];
    
    function datam($data){
    
    $keys=array_keys($data);
    
    foreach($keys as $key){
    
    $data=$data[$key];
    
    }
    
    return $data;
    
    }
    
    print_r(datam($data));
    yanlış anlamadıysam bu işinizi görecektir


    edit: Sanırım bu daha mantıklı oldu.
    <?php
    
    $data = [
    
        'channel' =>
    
            [
    
                'item' => [
    
                    ['product_id' => '1', 'product_name' => 'abc',]
    
                ]
      ]
     ];
     $container = ["channel", "item"];
    
    function datam($data){
    
    $keys=array_keys($data);
    if(array_sum($keys)<2){
    return $data;
    exit;
    }
    foreach($keys as $key){
    
    $data=$data[$key];
    
    }
    
    return $data;
    
    }
    
    print_r(datam($container));
    
    print_r(datam($data));
    ?>
  • 13-11-2022, 22:52:39
    #7
    hares adlı üyeden alıntı: mesajı görüntüle
    $data = [
    
        'channel' =>
    
            [
    
                'item' => [
    
                    ['product_id' => '1', 'product_name' => 'abc',],
    
                    ['product_id' => '2', 'product_name' => 'def',]
    
                ]
      ]
     ];
    
    function datam($data){
    
    $keys=array_keys($data);
    
    foreach($keys as $key){
    
    $data=$data[$key];
    
    }
    
    return $data;
    
    }
    
    print_r(datam($data));
    yanlış anlamadıysam bu işinizi görecektir


    edit: Sanırım bu daha mantıklı oldu.
    <?php
    
    $data = [
    
        'channel' =>
    
            [
    
                'item' => [
    
                    ['product_id' => '1', 'product_name' => 'abc',]
    
                ]
      ]
     ];
     $container = ["channel", "item"];
    
    function datam($data){
    
    $keys=array_keys($data);
    if(array_sum($keys)<2){
    return $data;
    exit;
    }
    foreach($keys as $key){
    
    $data=$data[$key];
    
    }
    
    return $data;
    
    }
    
    print_r(datam($container));
    
    print_r(datam($data));
    ?>

    $data = [
        'channel' =>
            [
                'item' => [
                    ['product_id' => '1', 'product_name' => 'abc',],
                    ['product_id' => '2', 'product_name' => 'def',]
                ]
            ]
    ];
    
    $container = ["channel", "item"];
    
    function getContent($data, $keys)
    {
    if ($keys) {
        foreach ($keys as $key) {
            $data = $data[$key];
        }
    }
    return $data;
    }
    
    $products = getContent($data, $container);
    Bu şekilde işimi görecek düzeye getirdim. Çok sağol yardımların için