PHP Array anahtar kodlama?

5 Cevap php

Ben dizide bir anahtar olarak kodlanmış bir dize kullanmak ve aynı zamanda dizide bir değer olarak aynı dizeyi kullanan, aşağıdaki kodu gibi gösterir:

$string = 'something in some encode';
$list = array();
$list[$string]['name'] = $string;

Ben (tıpkı print_r başlıklar / kodlama spesifik olmadan) dizi dışarı print_r zaman, aynı dize olarak basılmış gibi dizide önemli ve bu kadar 'isim' değeri olmadığını buldu, farklı kodlama gibi görünüyor.

Ben Çince karakteri ile yapıyorum. Php.ini ben özel kodlama satırı (bu ile ilgisi olup olmadığını bilmiyorum) yok.

Array tuşları dize kodlama hakkında bir şey var mı? Ya da sadece ben yanlış bir şekilde onları var? Yardımlarınız için teşekkürler.

5 Cevap

(Ben test edebilirsiniz ne gibi) ben Japonca çalıştı:

$test["要"]["name"] = "要";
print_r($test);

And the result went fine, as expected. I'm using UTF-8 for everything. I'm not sure if its a problem with your encoding settings (in php.ini) or the encoding you are using. if that is a problem, why don't you try to encode it with base64? (or other Ascii encoder). That way would be something like:

$test["6KaB"]["name"] = "要";

Ben Amacınız ne olduğundan emin değilim, bu yüzden yararlı olup olmadığını bana bildirin.

Bir anahtar tipi tamsayı veya dize olduğunu.

Alıntı için the manual

Bir katar karakterler dizisidir. PHP 6 önce, bir karakter bir bayt olarak aynıdır. Bu tam 256 farklı karakter olası var, bir. Bu aynı zamanda PHP Unicode yerleşik desteğe sahip olduğunu ima eder. Utf8_encode () ve bazı temel Unicode işlevselliği için utf8_decode () Bkz.

Bu yüzden anahtar olarak kullanılan dize kodlamak için durumunda mantıklı (veya yalnızca tuşu, ne yapacağını bağlıdır): utf8_encode()

Eğer tarayıcınız aracılığıyla bakıyorsunuz? Sonra kodlamayı belirtmek gerekir:

header('Content-Type: text/plain; charset=UTF-8'); // or BIG5, or whatever

Eğer terminalde onu incelemekte? Terminal ayarları aynı kodlama ayarlanmış olduğundan emin olun.

Ben bir dizi anahtar olarak kullanmak doğru dize kodlamak eğer biliyorum, ama bu tür değişkenlerin adlarını kullanmak mümkün olsa bile yok:

  • $ Element = 'foo';
  • $ Garçon = 'bar';

(Not ç ve é)

Bu tavsiye edilmez. Bu güvenmemelisiniz.

Muhtemelen mevcut ingilizce adı veya kullanım indeksleri ile eşlersiniz.

utf8 encoding, php kılavuzuna bakmak için.

Sadece bir danışıklı dövüş uygulamak için çalıştı, ama bu olmaz.

PHP Sürüm 5.3.6 (Mac OS 10.7.5)

    $test["要"] = "要";

    for ($i=0;$i<5000000;$i++) {
        $key = "";
        $num = $i;
        while ($num != 0) {
            $ascii = $num % 256;
            $num = floor($num / 256);
            $key .= chr($ascii);
        }

        $test[$key] = 'boom';
        if ($test["要"] != 'boom') {
            unset($test[$key]);
        }   
    }

    print_r($test);

çıkışlar:

    Array ( [要] => 要 )

engellenecektir.