Вопрос по javascript, arrays, json, php – Передать массив в JavaScript как массив не JSON из PHP

2

Во-первых, это не повторяющиеся вопросы. Я просматривал какую-то похожую проблему, и большую часть ответа я использую прямо сейчас.

Вот проблема, созданная, на стороне PHP

$array = array('name' => 'a', 'data' => array('0'=>15,'0.25'=>'18','0.35'=>19,'1' =>20));
echo json_encode($array);

на стороне JS

data = $.parseJSON(data); // data is the return from the php script above

Как вы можете видеть, $ array ['data' '] является ассоциативным массивом с числовым номером в качестве ключа и отсортированным по порядку. При анализе в JSON javascript изменил порядок этого массива, отсортировал 0 и 1 как числовой ключ и поместил их в начало объекта.

Я знаю, что это стандартное поведение для некоторых браузеров, таких как Chrome и IE9. Я где-то читал, что люди предлагают строго придерживаться массива, если я хочу поддерживать порядок массива. Но мой вопрос: как вы возвращаете массив из PHP в javascript как массив вместо использования объекта json? Или есть другое решение этой проблемы. Спасибо за вклад заранее.

Спасибо за вклад заранее

Afaik, парсеры JSON не гарантируют какой-либо порядок при декодировании, вам нужно использовать другое поле (или массив) для сохранения вашего порядка, используя ключи, которые не будут работать. Aknosis

Ваш Ответ

3   ответа
0

"0" а также"1" ключи и делает их цифровыми клавишами. Это не имеет ничего общего с вашим JavaScript.

Нет реального способа обойти эту проблему, но в идеале ваш код не должен полагаться на такие вещи, как «в каком порядке находятся ключи объекта». Возможно, из того, что я вижу здесь, может быть лучше разделить данные на массив ключей и массив значений, а затем объединить их обратно на стороне JS.

0

$array = array('name' => 'a',
               'data' => array('0'=>15,'0.25'=>'18','0.35'=>19,'1' =>20),
               'order'=> '0,0.25,0.35,1'
          );
echo json_encode($array);
3

а затем объект для создания карты. Есть два пути. Я бы предложил:

$array = array('name' => 'a', 'data' => 
  array(
    array('key' => 0, 'value' => 15),
    array('key' => 0.25, 'value' => 18),
    array('key' => 0.35, 'value' => 19),
    array('key' => 1, 'value' => 20),
  )
);
echo json_encode($array);

Что даст вам JSON:

{
    "name": "a",
    "data": [
       {"key": 0, "value": 15},
       {"key": 0.25, "value": 18},
       {"key": 0.35, "value": 19},
       {"key": 1, "value": 20}
    ]
}

Тогда у вас будет порядок, но найти определенный ключ будет сложнее. Если вы хотите, чтобы это было легко, вы можете вернуть также объект отображения:

$array = array('name' => 'a', 'data' => 
  array(
    "0" => 15,
    "0.25" => 18,
    "0.35" => 19,
    "1" => 20,
  ),
  'order' => array("0", "0.25", "0.35", "1")
);
echo json_encode($array);

Который даст вам:

{
    "name": "a",
    "data": {
       "0": 15,
       "0.25": 18,
       "0.35": 19,
       "1": 20
    },
    "order": ["0", "0.25", "0.35", "1"]
}

Один из этих двух способов возврата ваших данных должен оказаться наиболее полезным для вашего конкретного случая использования.

Error: User Rate Limit Exceeded Gäng Tian

Похожие вопросы