PHP для цикла, повторяющего массив JSON, проблема с запятой - PullRequest
0 голосов
/ 19 сентября 2011

Здравствуйте, я использую цикл for для подготовки строки JSON

//prepare a JSON Array [ obj1,obj2,obj3.... ]

echo "[";

foreach ($usernames as $value){
    //prepare a JSON String for $username
    //e.g. {"username":$value}

    // insert comma if there is next element in the array
    echo ",";
}

echo "]";

Моя проблема в том, что конечная запятая имеет неверный формат в JSON. Как определить, что цикл for достиг конца массива, подготавливая последний элемент, и, таким образом, мешает ему добавлять все символы, кроме последнего запятой?

Thankyou

Ответы [ 4 ]

5 голосов
/ 19 сентября 2011

Есть ли причина, по которой вы не используете json_encode для этого? Вы можете преобразовать обычный массив php в JSON одним быстрым вызовом, используя json_encode.

$arr = ("a"=>"one", "b"=>"two");

echo $json_encode($arr);

http://php.net/manual/en/function.json-encode.php

3 голосов
/ 19 сентября 2011

Если вы должны сделать это с помощью for, измените печать запятой на начало. Распечатайте его, только если это не первая итерация.

1 голос
/ 19 сентября 2011

Ну, вы можете сохранить все это в переменной, а после того, как это будет сделано, вы можете просто сделать:

$jsonVar = substr($jsonVar, 0, -1);

Перед добавлением последнего "]"

0 голосов
/ 19 сентября 2011

Решение, специфичное для вашей проблемы

echo "[";
ob_start();
foreach ($usernames as $value){
    //prepare a JSON String for $username
    //e.g. {"username":$value}

    // insert comma if there is next element in the array
    echo ",";
}
$data = ob_get_contents();
ob_end_clean() ;
echo rtrim($data,',');
echo "]"

, но правильный / стандартный / более простой способ - просто сделать json_encode ($ usernames);

...