我正在尝试将结果转换为json编码的字符串。我知道现在正在研究一个外部api似乎有点多,但我认为随着时间的推移它会派上用场。目前,我使用以下功能:
//API Details
public function APIReturnMembers() {
$query = <<<SQL
SELECT uname
FROM {$this->tprefix}accounts
SQL;
$encode = array();
$resource = $this->db->db->prepare( $query );
$resource->execute();
foreach($resource as $row) {
$encode[] = $row;
}
echo json_encode($encode);
}
就返回结果而言,它做了它应该做的事情,例如:
[{"uname" : "guildemporium"}, {"uname" : "doxramos"}]
当我看到我欣喜若狂!我正在实现自己的API,其他人可以在以后使用它,因为我实际上到了某个地方!当然,我已经打了个蠢蛋。测试我的API。 运行代码以获得我使用的结果
$api_member_roster = "https://guildemporium.net/api.php?query=members";
$file_contents = @file_get_contents($api_member_roster); // omit warnings
$memberRoster = json_decode($file_contents, true);
print_r($memberRoster);
好消息! 有用。我得到了一个结果,耶!
现在坏了。 我的结果是
[
0 => ['uname' => 'guildemporium'],
1 => ['uname' => 'doxramos']
]
所以我有一个很好的小数字整数打断了我的回报,所以我不能用我原来的想法
foreach($memberRoster as $member) {
echo $member->uname;
}
这个额外数字来自哪里?它是否会破坏我的生活,还是我第一次想到将结果归还给另一个成员?下次在X档案中查找。或者,如果你已经知道答案也很棒!
答案 0 :(得分:0)
数组中的编号行作为结果集的数组索引。如果您在脚本中使用print_r($encode);exit;
之前使用echo json_encode($encode);
,则应该看到完全相同的输出。
创建PHP数组时,默认情况下,所有索引都是从零开始递增的编号索引。您可以使用数字和字母的混合数组索引,但如果您坚持使用仅编号的索引或自然大小写英语索引,那么它会更好(主要是为了您自己的理智),您可以像对象一样使用数组,例如。
$arr = [
'foo' => 'bar',
'bar' => 'foo'
];
print_r($arr);
/*Array
(
[foo] => bar
[bar] => foo
)*/
$arr = [
'foo','bar'
];
/*Array
(
[0] => foo
[1] => bar
)*/
注意输出的差异?至于你的上一个问题;没有。这是正常和预期的行为。消费者将遍历数组,很可能在PHP中使用foreach
,在其他语言中使用for (x in y)
。
您正在做的是:
$arr = [
['abc','123']
];
这给了你:
Array
(
[0] => Array
(
[0] => abc
[1] => 123
)
)
为了使用$member->foo($bar);
,您需要反序列化json对象。
答案 1 :(得分:0)
在你自己的api中,你可以在json对象中返回响应
在您的api.php中
function Execute($data){
// Db Connectivity
// query
$result = mysqli_query($db, $query);
if( mysqli_num_rows($result) > 0 ){
$response = ProcessDbData($result);
}else{
$response = array();
}
mysqli_free_result($result);
return $response;
}
function ProcessDbData($obj){
$result = array();
if(!empty($obj)){
while($row = mysqli_fetch_assoc($obj)){
$result[] = $row;
}
return $result;
}
return $result;
}
function Convert2Json($obj){
if(is_array($obj)){
return json_encode($obj);
}
return $obj;
}
调用api.php
$result = $this->ExecuteCurl('api.php?query=members');
print_r($result);
这里你$ result将包含json对象