Çok boyutlu dizi tuşları - garip davranışlar

5 Cevap php

Ben aylık toplamları takip etmek için çok boyutlu bir ilişkisel dizi kullanıyorum, o zaman ben foreach ve çıkış içerikleri kullanarak ona döngü istiyorum.

Her iç dizi için toplamları elemanı 12 tutulur ve toplam ben 0 olsa bile çıkış istiyoruz "Toplam", hariç,> 0 ise sadece çıkış için her dizi istiyoruz.

  foreach($yearspend as $key => $format)
  {
     // only show formats with any spend
     if($key == "Total" || $format[12] > 0)
     {
        echo "<tr><td>$key</td>";
        foreach($format as $value)
        {
           echo "<td>".number_format($value,2)."</td>";
        }
        echo "</tr>";
     }
  }

Herhangi bir nedenle bu [0] [12] 0 olduğu halde, iç dizi 0 için verir.

İşte print_r dan çıktı:

Array
(
    [0] => Array
        (
            [12] => 0
        )

    [Group] => Array
        (
            [12] => 0
        )

    [Total] => Array
        (
            [12] => 0
        )
)

Lütfen herkes yardımcı olabilir?

5 Cevap

Denemek

 $key === "Total" ...

Bir dize ve bir dizi kıyaslarken, PHP bir sayısal tür dize dönüştürmek için çalışır ve daha sonra karşılaştırma yapar. '===' Operatör değeri ve tipi karşılaştırır, böylece bir dize sayısı eşit asla.

Değer çözümleyici tarafından tespit değilse karakter dizeleri PHP 0'a değerlendirmek. yani "4" 4 olarak aynı, ama "Toplam" 0 olarak aynı kabul edilir. Yani PHP, ifadesinde

"Total" == 0

true döndürür.

Sen === operatörünü kullanarak düzeltebilirsiniz:

if ("Total" === 0)

false döndürür

Bu yuvarlak bir hata sorun olabilir. Durumunuz değişti ise hala yanlış mı ...

if($key == "Total" || $format[12] > 0.001)

Scott'ın cevabı ($ anahtar === "Toplam") çalışacaktır. Ya da bu:

if (strval($key) == "Total" || $format[12] > 0)

PHP'nin foreach belgelerine Bu yorum gördüm:

It should be noted that when using foreach to pass an array's key ($key => $value), the key must be a string and not binary content - containing 0's, f.e., as was my case when i used foreach to parse bencoded data handed back to me from a bittorrent tracker scraping - as this will throw foreach off and hand you a key that is binary different than the actual content of the array.

bir cevap değil, ama umarım gidermenize yardımcı olacaktır.