【问题标题】:Creating an array inside of an array for json using PHP使用 PHP 在 json 数组中创建数组
【发布时间】:2018-01-26 04:41:30
【问题描述】:

我正在尝试使用 PHP 复制此 json 文件,但我似乎无法在另一个名为“级别”的数组中获取对象“位置”的数组

"levels": [
    {
        "id": "lower",
        "title": "Floor 26",
        "map": "images/apartment/upper.jpg",
        "minimap": "images/apartment/upper-small.png",
        "locations": [

            {
                "id": "1",
                "title": "Kitchen",
                "about": "",
                "description": "<img src=\"images/logo.png\" 
                 alt=\"sdfsfs\"><p>aaaaaaaaaaaaaa<p>",
                "category": "furniture",
                "x": "0.4746",
                "y": "0.2883",
                "zoom": "1"
            },

这是我目前所拥有的。

$connect1 = new mysqli("localhost", "root", "root", "location");
$result1 = mysqli_query($connect1, "SELECT * FROM locations");

$connect2 = new mysqli("localhost", "root", "root", "Floors");
$result2 = mysqli_query($connect2, "SELECT * FROM levels");


$data = array(); 
$levels = array();

while($row = mysqli_fetch_array($result2, MYSQLI_ASSOC)){
    $levels[] = $row;
}

  $data["levels"] = $levels;   

  $locations = array();


    while($row = mysqli_fetch_array($result1, MYSQLI_ASSOC)){
    $locations[] = $row;
    }

    $data["locations"] = $locations;

这是输出

"levels": [
    {
        "id":"1",
        "title":"Floor26",
        "map":"images\/apartment\/upper.jpg",
        "minimap":"images\/apartment\/upper-small.png"
    }
],
"locations": [
    {

问题是我希望 locations 成为 json 文件中显示的级别类别中的数组,而不是在插入数据后关闭 levels 数组。请帮忙。我是一个完整的初学者,所以任何建议将不胜感激。

【问题讨论】:

  • 可以显示result2吗??
  • var_dump($levels); 的输出是什么?
  • 从你展示的内容来看,你可能需要array_merge()你的位置数组和$row值,但我看不到你从哪里得到你的位置数组( s) 从。
  • 我编辑了它的代码。 @Rasclatt 我将如何使用 array_merge 呢?

标签: php json mysqli


【解决方案1】:

首先,使用更具描述性的变量名称。它们更容易阅读和理解。

其次,将位置添加到嵌套循环中的级别数组中:


编辑:实际上,您不需要嵌套循环,因为每个级别的位置都相同。如果您每次都查询不同的位置,或者根据级别更改导入的位置,那么嵌套将是有意义的。

$locationConnect = new mysqli("localhost", "root", "root", "location");
$locationsResult = mysqli_query($locationConnect, "SELECT * FROM locations");

$levelsConnect = new mysqli("localhost", "root", "root", "Floors");
$levelsResult = mysqli_query($levelsConnect, "SELECT * FROM levels");

$data = array(); 
$levels = array(); 
$locationsArray = array();

//actually since locations appear to be the same for all results, you don't need to nest the loops, this is more efficient:
//loop location results and build locations array:
while($locationRow = mysqli_fetch_array($locationResult, MYSQLI_ASSOC)){
    $locationsArray[] = $locationRow;
}

while($levelRow = mysqli_fetch_array($levelsResult, MYSQLI_ASSOC)){        
    //add locations array to your level row:
    $levelRow["locations"] = $locationsArray;
    //add level row to your levels array
    $levels[] = $levelRow;
}

$data["levels"] = $levels;  

//are you using this for something else? $employee_data seems to be a new array
$employee_data["locations"] = $locationsArray;

【讨论】:

  • 做了一些改变,时间还早,我没怎么睡。哈!试试这个最新版本。
  • 如何循环访问位置中的数据?它只返回第一行。
  • 好的,我刚刚再次更新了它,不需要嵌套循环,除非您在每个级别使用某种条件来包含位置。似乎您在所有级别都包含相同的位置,对吗?
  • 是的,所有级别的位置都相同
  • 好的,请使用最新版本,效率更高一点。
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 2017-09-27
  • 2018-05-21
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多