将PHP数组转换为JSON对象以自动完成

时间:2019-01-25 18:35:41

标签: javascript php materialize

我正在使用MaterializeCSS autocomplete,并且想使用我的PHP数组之一将所有可能的选项输出到表单中。请参阅下面的当前代码。

  const ac = document.querySelector('.autocomplete');
  M.Autocomplete.init(ac, {
    data: {
      "Test1": null,
      "Test2": null,
      "Test3": null
    },
  });

我非常想使用一个简单的$ keysArray来输入Test1,Test2,Test3选项等。但是,我从MaterializeCSS页面上了解到,自动完成功能使用的是对象而不是数组。因此,我尝试使用各种不同的方法将$ keysArray转换为对象:

  <?php
  $keysArray = array (
    "Test1",
    "Test2",
    "Test3"
  );
  ?>

  var tempArray = <?php echo json_decode(json_encode($keysArray)); ?>; // Doesn't work
  var tempArray = <?php echo json_decode(json_encode($keysArray, JSON_FORCE_OBJECT)); ?>; // Also doesn't work

  const ac = document.querySelector('.autocomplete');
  M.Autocomplete.init(ac, {
    data: tempArray;
  });

没有tempArray的工作。如果有人能帮助我弄清我做错了什么,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您将在对其进行编码后立即将其解码回数组。删除json_decode

  <?php
  $keysArray = array (
    "Test1",
    "Test2",
    "Test3"
  );
  ?>

  var tempArray = <?php echo json_encode($keysArray); ?>;

  const ac = document.querySelector('.autocomplete');
  M.Autocomplete.init(ac, {
    data: tempArray;
  });

答案 1 :(得分:1)

将数组转换为类似的键值结构:

  $keysArray = array(
    "Test1" => null,
    "Test2" => null,
    "Test3" => null,
  );
  echo json_encode($keysArray); // {"Test1":null,"Test2":null,"Test3":null}

可以将其转换为:

$array = array('Test1', 'Test2', 'Test3');
$keysArray = array_combine($array, array_fill(0, count($array), null));