İç içe foreach ()

4 Cevap php

Ben şu dizi var:

Array ( 
  [1] => Array ( 
    [spubid] => A00319 
    [sentered_by] => pubs_batchadd.php
    [sarticle] => Lateral mixing of the waters of the Orinoco, Atabapo
    [spublication] => Acta Cientifica Venezolana
    [stags] => acta,confluence,orinoco,rivers,venezuela,waters
    [authors] => Array ( 
      [1] => Array ( 
        [stype] => Author 
        [iorder] => 1 
        [sfirst] => A
        [slast] => Andersen ) 
      [2] => Array ( 
        [stype] => Author 
        [iorder] => 2 
        [sfirst] => S.
        [slast] => Johnson ) 
      [3] => Array ( 
        [stype] => Author 
        [iorder] => 3 
        [sfirst] => J. 
        [slast] => Doe ) 
      ) 
    ) 
  )

Ben sorunlarla çalıştırıyorum yazarların listesini tükürerek gelince ben dış dizideki unsurları ile yürümek) (iç içe bir foreach kullanarak ama duyuyorum. Yani çünkü deli foreach () yuvalama her biri birden fazla (çoklu) defa çıkış sorunu. Ne yuvalama foreach daha iyi bir yaklaşım olacaktır () bu örnekte döngüler?

UPDATE (With solution)

İşte ben, biraz dağınık (IMHO) yerleşmiş ama çalışır döngü:

$sauthors = NULL;
$stitle = NULL;

foreach($apubs as $apub)
{
  $stitle = $apub['sarticle'];
  foreach($apub as $svar=>$sval)
  {
    if($svar === "authors")
    {
      foreach($sval as $apeople)
      {
        $sauthors .= $apeople['slast'].", ".$apeople['sfirst']."; ";
      }
    }
  }
  echo "$sauthors<br />\n$stitle<br />\n";
}

4 Cevap

Niye yapmıyorsun

foreach($apubs as $apub) {
  $sauthors = '';
  $stitle = $apub['sarticle'];
  foreach($apub['authors'] as $author) {
    $sauthors .= $author['slast'].", ".$author['sfirst']."; ";
  }

  echo "$sauthors<br />\n$stitle<br />\n";
}

Sadece eğlence için. Eğer really döngüleri kaçınmak istiyorsanız, bu deneyin:

// Pre PHP 5.3:

function cb2($e)
{
    return $e['slast'] . ', ' . $e['sfirst'];
}

function cb1($e)
{
    $authors = array_map('cb2', $e['authors']);
    echo implode('; ', $authors) . ":<br />\n" . $e['sarticle'] . "<br />\n";
}

array_walk($data, 'cb1');



// PHP 5.3 (untested):

array_walk($data, function($e)
{
    $authors = array_map(function($e)
    {
        return $e['slast'] . ', ' . $e['sfirst'];
    },
    $e['authors']);

    echo implode('; ', $authors) . ":<br />\n" . $e['sarticle'] . "<br />\n";
});

Senin sorunun birden makaleler Aynı yazara ve böylece birden fazla çıkış alıyorsanız o ise, basit çözüm yerine hemen çıktılamayıp yazarların bir dizi oluşturmaktır.

Eğer işlenen onca yazarların bir dizi var, bu yazar orada ya da değil zaten eğer şimdiye kadar kolayca karşılaştırabilirsiniz.

Bir look at this al