我有一个像这样的数组,我使用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()
。
答案 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 - 打印有关变量的可读信息
人类可读并不意味着计算机可读。
您有两种选择:
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);
// web service.
$a=(array)$a;
json_encode($a);
// receiving end.
$result = file_get_contents('http://sample.com/change.php');
var_dump(json_decode($result);
我建议使用json
,因为几乎每个平台都可以是您的网络服务的客户端。使用本机序列化时,您的WS的使用者也将使用php编写客户端。