PHP - Dizideki Sayma uyan diziler

4 Cevap php

Şöyle bir dizi yapıya sahiptir:

    Array
(
    [0] => Array
        (
            [type] => image
            [data] => Array
                (
                    [id] => 1
                    [alias] => test
                    [caption] => no caption
                    [width] => 200
                    [height] => 200
                )

        )

    [1] => Array
        (
            [type] => image
            [data] => Array
                (
                    [id] => 2
                    [alias] => test2
                    [caption] => hello there
                    [width] => 150
                    [height] => 150
                )

        )

)

Benim soru nasıl kendi türü görüntü (ya da bu konuda başka bir şey) olarak ayarlamak gömülü dizilerin sayısı bir sayı alabilirsiniz, nedir? Uygulamada bu değer değişebilir.

Yani, yukarıdaki dizi bana 2 bir cevap verecekti.

Teşekkürler

4 Cevap

Basit yolu sadece tüm alt diziler üzerinde döngü olmak ve gerekli türü eşleşen eğer bir sayaç artan, kendi türünü kontrol olur.

$count = 0;
foreach ( $myarray as $child ){
    if ( $child['type'] == 'image' ){
        $count++;
    }
}

PHP 5.3.0 veya daha varsa array_reduce (denenmemiş) kullanabilirsiniz:

$count = array_reduce($myarray, 
                      function($c, $a){ return $c + (int)($a['type'] == 'image'); },
                      0
         );

Bunların ikisi de saymak türünü belirtmek için izin verecek $count dönen bir işlev içine taşınmış olabilir. Örneğin:

function countTypes(array $haystack, $type){
    $count = 0;
    foreach ( $haystack as $child ){
        if ( $child['type'] == $type ){
            $count++;
        }
    }
    return $count;
}

Diğer cevaplar gördüğünüz gibi size (assert için kullanmak istiyorum hangi) imkansız ne olması gerektiğini söyledi değil gibi yapabileceğin denetimi çok daha fazla hata ancak, orada.

Olası hataları şunlardır:

  • Çocuğunuz bir dizi değil
  • Çocuk type anahtarını ayarlayın var

Diziniz her zaman örnek gibi yola gerektiğini eğer başka programda bir hata maske gibi, sessizce başarısız (bir bir çek koyarak deyimi varsa) kötü bir fikir olacaktır.

Eğer dizinin her öğesi üzerinde yineleme ve unsur durumu maç olmadığını kontrol etmek gerekir:

$data = array(...);

$count = 0;
foreach ($data as $item) {
    if ('image' === $item['type']) {
        $count++;
    }
}

var_dump($count);

PHP 5.3 kullanıyorsanız eğer Yacoby cevabı ek olarak, bir kapatma ile fonksiyonel tarzı yapabilirdi:

$count = 0;
array_walk($array, function($item)
{
    if ($item['type'] == 'image')
    {
        $count++;
    }
});

Bu deneyin:

function countArray(array $arr, $arg, $filterValue)
{
    $count = 0;
    foreach ($arr as $elem)
    {
        if (is_array($elem) &&
                isset($elem[$arg]) &&
                $elem[$arg] == $filterValue)
            $count++;
    }
    return $count;
}

Lütfen Örneğin, bunu şöyle çağırır:

$result = countArray($array, 'type', 'image');