• 23-08-2019, 21:25:15
    #1
    Merhaba arkadaşlar. Bir HTML kodum var. Bu kodda img ve html tagları peşi sıra geliyor. Örnek kod:

    <img src="http://www.whatever.com" alt="" />
    abc
    <br>
    <h3>title</h3>
    <div class="content">content <a href="link">my link</a></div>
    <img src="https://goingnowhere.com" alt="">
    def
    <br>
    <h3>title 2</h3>
    <div class="content">content <a href="link">my link</a>
    bla bla bla
    </div>
    ...diye gidiyor. Ben bu kodu fonksiyona koyduğumda şöyle bir array çıktısı almak istiyorum:
    (
    [0]=>(
    ['img']=>'<img src="http://www.whatever.com" alt="" />',
    ['html']=>'abc
    <br>
    <h3>title</h3>
    <div class="content">content <a href="link">my link</a></div>'),
    [1]=>(
    ['img']=>'<img src="https://goingnowhere.com" alt="">',
    
    ['html']=>'def
    <br>
    <h3>title 2</h3>
    <div class="content">content <a href="link">my link</a>
    bla bla bla
    </div>')
    )
    Bunu DOM parse ile nasıl yaparım? Yardımlarınız için teşekkürler. 😜
  • 24-08-2019, 03:00:41
    #2
    Şöyle çözebilrsiniz, preg split ile img taglarından ayırdım, ilk eleman boş geldiği için splice ettim, 2 li gruplara ayırıp 0 a 'img' 1 e 'html' dedim.
    $data = preg_split('/(<img .*>)/i', $source, -1,  PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    array_splice($data, 0, 1);
    
    $mainData = array_chunk($data, 2);
    
    foreach ($mainData as &$arr) {
    
        $arr['img']=$arr[0];
        unset($arr[0]);
        $arr['html']=$arr[1];
        unset($arr[1]);
    
    }
    print_r($mainData);