Nasıl PHP yuvalanmış dizideki verileri çıkarmak için?

5 Cevap php

Bu here bir takip sorudur. Ama sorusu farklıdır.

Ben aşağıdaki dizi çıkışları var.

Array $events

Array
(
    [0] => Array
        (
            [day] => 17
            [eventContent] => event 1 of 17th
            [eventTitle] => 17th event 1
        )

    [1] => Array
        (
            [day] => 19
            [eventContent] => event 1 of 19th
            [eventTitle] => 19th event 1
        )

    [2] => Array
        (
            [day] => 05
            [eventContent] => event 1 of 5th
            [eventTitle] => 5th event 1
        )

    [3] => Array
        (
            [day] => 17
            [eventContent] => event 2 of 17th
            [eventTitle] => 17th event 2
        )

    [4] => Array
        (
            [day] => 19
            [eventContent] => event 2 of 19th
            [eventTitle] => 19th event 2
        )

    [5] => Array
        (
            [day] => 19
            [eventContent] => event 3 of 19th
            [eventTitle] => 19th event 3
        )

)

Ve ben Çıkışları güne çekmek istiyorum.

Ben bu kullanırsanız, 1,2,3 vb bulacaktır Ama 17, 19 vb istiyorum

if(array_key_exists($day,$events)){...

Anyon bunu nasıl lütfen bana söyler misiniz?

Şimdiden teşekkürler.

- GÜNCELLEME -

Ben değiştirmek gerekir orijinal görünüm hangi.

if(array_key_exists($day,$events))
{

//adding the date_has_event class to the <td> and close it
echo ' class="date_has_event"> '.$day;
//adding the eventTitle and eventContent wrapped inside <span> & <li> to <ul>
echo '<div class="events"><ul>';?>
<?php foreach ($events as $event) : ?>
<li>
<span class="title"><?php echo $event['eventTitle']; ?></span>
<span class="desc"><?php echo $event['eventContent']; ?></span>
</li>
<?php endforeach; ?>

<?php                           
echo '</ul></div>';
}

5 Cevap

Bu deneyin:

$eventsByDay = array();
foreach ($events as $key => $event) {
    if (!isset($eventsByDay[$event['day']])) {
        $eventsByDay[$event['day']] = array();
    }
    $eventsByDay[$event['day']][] = $event;
}

$eventsByDay şimdi önemli gün ve değeri gelen olaylar dizisi bir dizidir.

foreach ($events as $event) {
   echo $event['day'];
}

Ya da belirli bir gün olsun:

echo $events[0]['day'];

soru .. bazı farklı yaklaşımlar yapmak istiyorum şapka:

eaxmple için basit bir foreach kullanarak onları baskı:

foreach($array as $element) {
    echo $element['day']."\n";
}

veya array_map ile bu değerleri jsut tutan bir dizi yeniden oluşturmak:

function map_func($dat) {
    return $dat['day'];
}
$days = array_map('map_func', $array);
$events = array(...);
$days = array();

foreach($events as $event) {
  $day = $event['day'];
  $count = isset($days[$day]) ? $days[$day]++ : 1;

  $days[$day] = $count;
}

print_r($days);

Yukarıdaki kod yeni bir dizi oluşturur: [gün] => Etkinlikler saymak

Eğer> php 5 kullanırsanız bu deneyin

$iterator = new RecursiveArrayIterator($array);

for($i=0;$<count($iterator);$i++)
{
// code here or 
echo $iterator[$i]["day"];

}