在PHP中为JSON格式字符串数组生成键/值对

时间:2016-06-20 22:34:47

标签: php mysql arrays json

我正在遍历localhost MySql表中的一列。我可以打印此表中的所有值。我的目标是将这些值转换为JSON格式,以便我的Android应用程序可以读取和填充ListView。我似乎有 设置"键的问题"格式化JSON字符串所需的键/值对中的值。我不知道如何使用while循环来创建这些带有键/值对的json_encode数组。

这是我到目前为止所尝试的内容:

它可以工作,但我希望我的while循环分配键/值对并创建JSON字符串,以便我的应用程序可以将其上传到ListView。

//all connections to database have been established
$hold = "select email from info";
$h = mysqli_query($connection,$hold);
$a = array();
$d = 0;

while($row = mysqli_fetch_array($h)){
    echo $d.'<pre>'.$row['email'].'<pre>';//this works fine
    $a[d] = $row['email']; //values have been assigned to array that will be    
    //converted to JSON format, but how can I assign the "key" to each value
    //now inside here it says that 'd' is an undefined constant. What could be
    //wrong with the scope of 'd'?
    $d++;
}

一旦分配了密钥,我只需要使用json_encode()将数组转换为json格式。在我的Android应用程序上,我将检索这些键/值对。所以不知何故,我的应用程序代码需要知道&#34; key&#34;在while循环中分配。它可能是按字母顺序排列的键,因此我可以遵循一个有助于我检索值的顺序。

如果您有任何想法或想法,请告知。

谢谢

3 个答案:

答案 0 :(得分:1)

如果你想要从0到n的键,你不需要自己索引数组。

$a[] = $row['email'];

同样d是一个未定义的常量,因为你没有用$作为前缀(这会使它成为对变量的引用)。

请参阅PHP docs - Creating/modifying with square bracket syntax

答案 1 :(得分:1)

正如其他评论/答案所说,params将完成此操作而不使用partition_strategy,但如果您需要稍后从数据库中检索值,则可能使用增加的数字不行。

当你想要查找记录(自动增量id是我的选择)时,你的表应该有一些独特的标识符供你用作密钥,而不是PHP生成的无关整数。在数据库中建立此唯一ID后,您可以修改代码以使用它:

$a[] = $row['email'];

根据这里的评论澄清:

$d

答案 2 :(得分:1)

您需要知道json中有多少个键/值对。你可以使用php的count方法来确定有多少个并将它放在json中。

要确定键,您应该使用序列。

//all connections to database have been established
$hold = "select email from info";
$h = mysqli_query($connection,$hold);
$a = array();
$d = 0;

while($row = mysqli_fetch_array($h)){

$a["x".$d] = $row['email']; //Now you know, that keys will be like x0, x1, x2, x3... 
//converted to JSON format, but how can I assign the "key" to each value
//now inside here it says that 'd' is an undefined constant. What could be
//wrong with the scope of 'd'?
$d++;
}

$a["total"] = count($a); // this gives you total number of key/value pairs

此外,您应该删除'echo'语句,因为它可能会干扰json输出。

最后,您可以使用json_encode