循环json数组并在php中返回值

时间:2013-07-15 21:28:23

标签: php arrays json

我使用库来将本地WebSQL DB同步到服务器https://github.com/orbitaloop/WebSqlSync。我使用PHP:5.4.7 这是json var $ json

{
"info":"",
"data":{
    "clientes":[],
    "conceptos_gastos":[],
    "formaspago":[{
        "idFormaPago":7,
        "FormaPago":"quwuw",
        "Dias":1,
        "Cuotas":1,
        "last_sync_date":null
    }],
    "listaprecios":[],
    "producto":[],
    "repartidores":[],
    "tipodocumento":[],
    "vehiculos":[],
    "zonas":[]
}
}

当我尝试获取值

$js=json_decode($json,true);
foreach ($js['formaspago'] as $row ) {
   echo $row["Formapago"];

}

我收到此错误:

  

为foreach提供的参数无效

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

使用json_decode

//array
$data = json_decode($json, true);
foreach($data["data"]["formaspago"] as $row) {
    echo $row["Formapago"];
}

感谢@JimL提示。

答案 1 :(得分:1)

您没有将有效数组传递给foreach循环。但是,即使你解析了你提供的json,foreach也无法工作,因为它是一个对象而不是一个数组。

$json = '{
"info":"",
"data":{
    "clientes":[],
    "conceptos_gastos":[],
    "formaspago":[{
        "idFormaPago":7,
        "FormaPago":"quwuw",
        "Dias":1,
        "Cuotas":1,
        "last_sync_date":null
    }],
    "listaprecios":[],
    "producto":[],
    "repartidores":[],
    "tipodocumento":[],
    "vehiculos":[],
    "zonas":[]
}
}';

$obj = json_decode($json);

print $obj->info将返回一个空字符串。

$obj->data是一个具有各种属性的对象,其中一些属性是空数组。将这些传递到foreach应该有效。即。

foreach($obj->data->clients as client) {
  // Do something here
}

此外,$obj->data->formaspago在数组中只有一个元素,它是一个对象。您可以使用foreach循环访问此对象:

foreach($obj->data->formaspago as formaspago) {
  print formaspago->idFormaPago; // Will print 7
  print formaspago->FormaPago; // Will print "quwuw"
  print formaspago->Dias; // Will print 1
  print formaspago->Cuotas; // Will print 1
  print formaspago->last_sync_date; // Will print nothing
}