2016-01-25 6 views
0

Я пытаюсь превратить свои результаты в кодировку json. Я знаю, что теперь работа над внешним api кажется немного, но я думаю, что это будет полезно, когда время будет продолжаться. В настоящее время я использую следующую функцию:Преобразование MySQL в Json ResultSet

//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, который другие могли бы использовать позже, поскольку я действительно где-то был! Теперь, конечно, я попал в hickup. Тестирование моего 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); 

Хорошая новость! Это работает. Я получаю результат назад, yay!

Теперь плохо. моего результата

[ 
    0 => ['uname' => 'guildemporium'], 
    1 => ['uname' => 'doxramos'] 
] 

Так что я получил это хорошее небольшое число целого отключающий мое возвращение, так что я не могу использовать свою оригинальную идею

foreach($memberRoster as $member) { 
     echo $member->uname; 
} 

Где это дополнительное число взялось? Пришел ли он, чтобы разрушить мою жизнь, или я испортил свой первый раз, играя с идеей возвращения результатов другому участнику? Узнайте в следующий раз о X-Files. Или, если вы уже знаете ответ, который тоже будет замечательным!

+1

Я думаю, что вы просто хотите 'Эхо $ член [ 'uname'] '. Когда вы преобразовали из json_string в php-объект, вы сделали его массивом, а не std-php-объектом. Я не уверен, что вы имеете в виду, когда говорите «дополнительный номер». Число - это индексы массива, они начинаются с 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 
)*/ 

Обратите внимание на разницу в выходе? Что касается вашего последнего вопроса; нет. Это нормальное и ожидаемое поведение. Потребители будут перебирать массив, скорее всего, используя foreach в PHP, или for (x in y) на других языках.

Что вы делаете:

$arr = [ 
    ['abc','123'] 
]; 

, который дает вам:

Array 
(
    [0] => Array 
     (
      [0] => abc 
      [1] => 123 
     ) 
) 

Для того, чтобы использовать $member->foo($bar); вам нужно десериализируются объекты JSon.

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; 
} 

Calling апи.PHP

$result = $this->ExecuteCurl('api.php?query=members'); 
print_r($result); 

здесь $ результат будет содержать объект JSON

Смежные вопросы