JSON ilişkisel dizi için bir PHP ilişkisel dizi dönüştürme

2 Cevap php

Ben json_encode kullanarak JavaScript için bu gibi görünüyor PHP bir look-up tablosu çeviriyorum:

 AbilitiesLookup Object
(
[abilities:private] => Array
    (
        [1] => Ability_MeleeAttack Object
            (
                [abilityid:protected] => 
                [range:protected] => 1
                [name:protected] => MeleeAttack
                [ability_identifier:protected] => MeleeAttack
                [aoe_row:protected] => 1
                [aoe_col:protected] => 1
                [aoe_shape:protected] => 
                [cooldown:protected] => 0
                [focusCost:protected] => 0
                [possibleFactions:protected] => 2
                [abilityDesc:protected] => Basic Attack
            )
            .....snipped...

Ve JSON, öyle:

{"1":{"name":"MeleeAttack","fof":"2","range":"1","aoe":[null,"1","1"],"fp":"0","image":"dummy.jpg"},....

Sorun bir JS nesnesi değil, bir dizi olsun ve tanımlayıcı bir sayıdır. Ben bu soruna 2 yollarını görmek - ya da bu tür json_encode (veya diğer bazı özel kodlama fonksiyonları) bir JavaScript ilişkisel dizi verebilir emin olun (ben bilmiyorum) bir numarayı kullanarak JSON erişmek için bir yol bulmak ya.

(Evet, ben değil benim JavaScript bölümünde eksik duyuyorum).

Note: json çıktısı dizi eşleşmiyor - I (anahtar olarak dizin ile) bir dizi üzerine iterek önce indis her öğe için bir manuel json kodlama, çünkü bu, o Üzerinde json_encode kullanılmıştır. Bir ilişkisel dizi (json çıkış bir dizi değil neden olan) çünkü açık olmak gerekirse, sayı sıralı değildir.

2 Cevap

JavaScript nesne özellik adları herhangi bir formatta dizeleri olabilir. (Senin durumunda olduğu gibi) bile sadece rakam olabilir ve sayısal endeksler / tuşları ile erişimde hiçbir sorun yok:

var obj = {
    "1": "foo",
    "2": "bar"
};

obj["1"]; // returns "foo"
obj[1]; // returns "foo" (1 will implicitly get cast to the string "1")

array ('a', 'b', 'c'), ['a', 'b', 'c'] gibi kodlar

Belki yerine dizi nesne dönüşüm nedeni olduğunu değil 0'dan 1'e sizi indeksi php dizi

Ben kontrol ettik ve

<?php
echo json_encode(array('a', 'b', 'c'))."\n";
echo json_encode(array(0 => 'a', 'b', 'c'))."\n"; // same as above but explicit
echo json_encode(array(1 => 'a', 'b', 'c'))."\n";

verir

["a","b","c"]
["a","b","c"]
{"1":"a","2":"b","3":"c"}