将Array作为Object PHP的键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Array作为Object PHP的键相关的知识,希望对你有一定的参考价值。

我正在为移动应用程序构建一个简单的服务,使用php为移动应用程序提供JSON。我在代码中有两个代码表,在代码段下面:

$con = mysqli_connect(HOST, USER, PASS, DB);
$sql_results = mysqli_query($con, "SELECT * FROM `table-images`");
$sql_results_1 = mysqli_query($con, "SELECT * FROM `table-code` WHERE id='$id'");

$rows = array();
while($r = mysqli_fetch_assoc($sql_results)) {
   $rows[] = $r;
}
echo'{"response":'.json_encode($rows).'}';

上面的结果代码:

{
"response": [{
    "id": "31",
    "shirtImage": "Content/Images/Short Sleeve/874be7b82812f76c944d71706c9651eb.gif"
}, {
    "id": "32",
    "shirtImage": "Content/Images/Short Sleeve/b-Cleaned.png"
}]
}

我想把sql_results_1的结果作为结果的关键,这里我需要JSON:

{
"response": [{
    "id": "31",
    "shirtImage": "Content/Images/Short Sleeve/874be7b82812f76c944d71706c9651eb.gif",
    "idcode": [{
        "X": 0,
        "Y": 1,
        "Z": 2
    }]
}, {
    "id": "32",
    "shirtImage": "Content/Images/Short Sleeve/b-Cleaned.png",
    "idcode": [{
        "X": 2,
        "Y": 1,
        "Z": 0
    }]
}]
}

密钥idcode来自'$ sql_results_1'。我是PHP编程的新手,我读了一些关于我自己的问题,但结果并不是我所期待的。

编辑

正如@Ashu回答,这里的代码现在:

$final_array = array();
$i=0;

while($r = mysqli_fetch_assoc($sql_results)) {
    array_push($final_array,$r);
    $res = mysqli_query($con, "SELECT * FROM `table-code` WHERE id='".$row['id']."'");
    while($r = mysqli_fetch_assoc($res)) {
       $final_array[$i]["idcode"] = array("x"=>$r['x']);
    }
    $i++; 
}

但关键的idcode是JSONObject "idcode":{x=0},我需要它作为JSONArray "idcode":[{x=0}]

答案

首先,我会推荐PDO而不是mysqli。但是对于mysqli,事情如下:

fetch assoc函数:

返回表示结果集中获取的行的字符串的关联数组,其中数组中的每个键表示结果集列之一的名称,如果结果集中没有更多行,则返回NULL。

如果结果的两列或更多列具有相同的字段名称,则最后一列将优先。要访问同名的其他列,您需要使用mysqli_fetch_row()或添加别名来访问带有数字索引的结果。

当您将所有内容推送到数组时,您将拥有一个包含所有结果的多维数组$ rows:

 $rows[];

跟着:

foreach($rows as $key => $row) {
    $res = mysqli_query($con, "SELECT * FROM `table-code` WHERE id='".$row['id']."'");
   $row["idcode"] = mysql_fetch_assoc($res);
   $rows[$key] = $row;
}

未经测试。它给你正确的想法吗?

另一答案

第一个结果存储到数组中:

$final_array = array();
while($r = mysqli_fetch_assoc($sql_results)) {
   array_push($final_array,$r);
}

第二个表结果,你必须使用$ i在final_array中创建idcode键。

$i=0;
while($r = mysqli_fetch_assoc($sql_results1)) {
   $final_array[$i]["idcode"] = array("x"=>$r['x'],"y"=>$r['y'],"z"=>$r['z']);
   $i++; 
}

echo'{"response":'.json_encode($final_array).'}';

以上是关于将Array作为Object PHP的键的主要内容,如果未能解决你的问题,请参考以下文章

PHP 将二维数组中某列值作为数组的键名

使用Array对象作为ES6 Map的键

PHP如何根据数组中的键值进行排序

使用对象的键作为联合类型

php函数array_column如何将二维数组转为一维数组

PHP array_combine