使用curl进行多维数组提取在foreach中显示无效参数

时间:2014-04-29 08:23:05

标签: php

我有一个像这样的数组,我使用file_get_content获取,这里是我获取数组的其他方url(http://sample.com/change.php)code

$a=array();
$a=Db::getInstance()->ExecuteS("SELECT *
FROM tablename
LIMIT 0 , 2
;");

$a=(array)$a;
print_r($a);

然后我用

$result = file_get_contents('http://sample.com/change.php');

这是$ result的输出:

Array
(
    [0] => Array
        (
            [id_stock_available] => 1
            [id_product] => 1
            [id_product_attribute] => 0
            [id_shop] => 1
            [id_shop_group] => 0
            [quantity] => 3
            [depends_on_stock] => 0
            [out_of_stock] => 2
        )

    [1] => Array
        (
            [id_stock_available] => 2
            [id_product] => 2
            [id_product_attribute] => 0
            [id_shop] => 1
            [id_shop_group] => 0
            [quantity] => 1
            [depends_on_stock] => 0
            [out_of_stock] => 2
        )

)

当我为$ result应用foreach时:

foreach ($result as $value) {
    var_dump($value);
    //var_dump($value['installed'];
}

它显示了我Invalid argument supplied for foreach()

3 个答案:

答案 0 :(得分:1)

在您的php文件中,您必须将其更改为:

// your query here
$a = Db::getInstance()->ExecuteS("SELECT * FROM tablename LIMIT 0 , 2;");
// then output it as JSON
header('Content-Type: application/json');
echo json_encode($a);

然后在其他php上获取它:

$result = file_get_contents('http://sample.com/change.php');
$values = json_decode($result, true);

值应在$values上作为数组

答案 1 :(得分:0)

file_get_contents返回响应内容(失败时返回false ),这是字符串,但不是数组

你必须将print_r的结果解析回数组,这不是一个好主意。

因此,使用一些编码/解码策略来执行此操作:

echo json_encode($a);

$result = file_get_contents('http://sample.com/change.php');
$result = json_decode($result, true);

答案 2 :(得分:0)

print_r不是序列化Web服务数据的正确方法,因为序列化数据意味着它应该在接收端反序列化。如您所知,反序列化 print_r输出的数据不是一个函数,即获取由print_r创建的字符串并返回传入的array还来自docs

  

print_r - 打印有关变量的可读信息

人类可读并不意味着计算机可读

您有两种选择:

  1. php serialize / unserialize

    // web service.
    $a=(array)$a;
    serialize($a);
    
    // receiving end.
    $result = file_get_contents('http://sample.com/change.php');
    var_dump(unserialize($result);
    
  2. json_encode / json_decode

    // web service.
    $a=(array)$a;
    json_encode($a);
    
    // receiving end.
    $result = file_get_contents('http://sample.com/change.php');
    var_dump(json_decode($result);
    
  3. 我建议使用json,因为几乎每个平台都可以是您的网络服务的客户端。使用本机序列化时,您的WS的使用者也将使用php编写客户端。