Конвертировать 2D массив из PHP в JS - PullRequest
0 голосов
/ 29 августа 2018

Представьте, что у меня есть 2D-массив в PHP, например:

<?php
$db = array(
    "1" => array(
         "1" => "aaa",
         "2" => "bbb",
         "3" => "ccc"
    ),
    "2" => array(
         "1" => "ddd",
         "2" => "eee"
    ),
    "3" => array(
         "1" => "fff",
         "2" => "ggg",
         "3" => "hhh"
    )
);
?>

И я хотел бы преобразовать его в JS, да, я могу сделать что-то вроде:

var db = new Array(3);
db[1][1] = "aaa";
db[1][2] = "bbb";
db[1][3] = "ccc";
db[2][1] = "ddd";
db[2][2] = "eee";
db[3][1] = "fff";
db[3][2] = "ggg";
db[3][3] = "hhh";

Бит эта инициализация массива в JS ужасна, есть ли лучший способ инициализировать его, как в PHP?

Ответы [ 4 ]

0 голосов
/ 29 августа 2018

Если вы хотите использовать массив PHP в JS Script, вы можете объявить его в PHP

<?php 
  $db = array(
  "1" => array(
      "1" => "aaa",
      "2" => "bbb",
      "3" => "ccc"
  ),
  "2" => array(
      "1" => "ddd",
      "2" => "eee"
  ),
  "3" => array(
      "1" => "fff",
      "2" => "ggg",
      "3" => "hhh"
  )
); 
?>

затем просто "проследите" за объявлением массива JS.

<script>
    var myJsObject = <?= json_encode($db) ?>; 
</script>

В противном случае, если ваш вопрос касается кодировки syle

<script> 
 var myJsObject = { 
              "1" : { 
                  "1" : "aaa", 
                  "2": "bbb", 
                  "3" : "ccc"
              }, 
              "2" : { 
                  "1" : "dd", 
                  "2": "ee"
               }
             }; 
</script>

Обратите внимание, что ассоциативные массивы PHP - это объекты, если они представлены в JS, а не массивы. Вы также можете обращаться к ним как к массиву.

0 голосов
/ 29 августа 2018

Можно json_encode массив

PHP

$db = array(
"1" => array(
     "1" => "aaa",
     "2" => "bbb",
     "3" => "ccc"
),
"2" => array(
     "1" => "ddd",
     "2" => "eee"
),
"3" => array(
     "1" => "fff",
     "2" => "ggg",
     "3" => "hhh"
)
);
echo json_encode($db);

выход

 {"1":{"1":"aaa","2":"bbb","3":"ccc"},"2":{"1":"ddd","2":"eee"},
 "3": {"1":"fff","2":"ggg","3":"hhh"}}

Javascript

 var arr = {"1":{"1":"aaa","2":"bbb","3":"ccc"},"2":{"1":"ddd","2":"eee"},
 "3": {"1":"fff","2":"ggg","3":"hhh"}};

Выход с некоторым индексом

 arr[1][1] = aaa
 arr[1][3] = ccc
 arr[2][2] = eee
0 голосов
/ 29 августа 2018

Ваш PHP-массив выглядит как ассоциативный массив ассоциативных массивов: отличный способ иметь именованные ключи, которые указывают на ваши значения.

В JS массивы индексируются с нуля с нуля, а типом данных, который используется для пар именованный ключ => значение, является объект JS.

Вот два подхода. В примере № 1 используется синтаксис массива, если значение индекса не нужно указывать явно. Пример # 2 демонстрирует использование объекта JS, если ваши ключи должны быть названы в виде строки.

var example1 = [
    ['aaa', 'bbb', 'ccc'],
    ['ddd', 'eee'],
    ['fff', 'ggg', 'hhh']
];


var example2 = {
    "1": {
        "1": "aaa",
        "2": "bbb",
        "3": "ccc"
    },            
    "2": {
        "1": "ddd",
        "2": "eee"
    },
    "3": {
        "1": "fff",
        "2": "ggg",
        "3": "hhh"
    }
};
0 голосов
/ 29 августа 2018

js также может инициализировать массив в одну строку:

var db = [["aaa", "bbb", "ccc"], ["ddd", "eee", "fff"], ["ggg", "hhh", "iii"]]

на самом деле очень редко можно увидеть обозначение new Array() (я забыл об этом, пока не прочитал ваш вопрос)

Бонус: этот способ объявления массивов также корректен в php

$db = [["aaa", "bbb", "ccc"], ["ddd", "eee", "fff"], ["ggg", "hhh", "iii"]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...