我有一个POST Rest API,它有一个名为$ arrProducts的参数。 参数应该是一个数组。 但是发送给API的值不是数组,而是一个字符串,形式为数组。
让我举一个传递的字符串参数的例子:
"$arrProducts = array(array("product_id"=>'79',"qty"=>2,"options" =>array("525"=>'')),array("product_id"=>'41',"qty"=>3),"options"=>array("195"=>'')));"
此参数即使看起来像数组也不是。这是一个字符串。所以我试着让它更像一个数组。
$stringVar = $_POST['arrProducts'];
$str = rtrim($stringVar, ";"); //To lose the semicolon at the end of the string
$arrProducts = substr($str, 15); // To lose the first part of the string "$arrProducts = " to make it formatted exactly like an array.
所以在此之后我得到了纯数组形式"array(array("product_id"=>'79',"qty"=>2,"options" =>array("525"=>'')),array("product_id"=>'41',"qty"=>3),"options"=>array("195"=>'')))"
现在我的问题是如何将此字符串转换为数组?
好的,听我做的是先改变数据传输到Rest API的方式。 我用了json_encode。 然后在我的Rest API中,我使用json_decode抓取了数据。
现在这是我的新问题。 arrProducts的格式如下。我在解析json_decode时遇到了问题。
$product_id = "45";
$qty = 20;
$option_type_id_for_option_id_151 = '826';
$option_type_id_for_option_id_124 = '657,658,';
$option_type_id_for_option_id_126 = 'Test for field option';
$arrProducts = array(
array(
"product_id" => $product_id,
"qty" => $qty,
"options" => array(
"151" => $option_type_id_for_option_id_151,
"124" => $option_type_id_for_option_id_124,
'126' => $option_type_id_for_option_id_126
)
),
array(
"product_id" => '60',
"qty" => '1',
"options" => array(
"156" => '862',
"167" => '899',
"168" => '902',
"159" => '877',
"160" => '889,890,891,'
)
),
array(
"product_id" => '58',
"qty" => '1',
"options" => array(
"174" => '938',
"176" => '943',
"178" => ''
)
)
);
问题在于我将使用json_decode解析数据的方式: 这是我写的,但由于某种原因,选项数组中存在问题。
$stringVar = $_POST['arrProducts'];
$arrProductsVar = json_decode($stringVar, TRUE);
$i = 0;
$arrProducts = array();
if ($arrProductsVar !== NULL)
{
foreach ($arrProductsVar['arrProducts'] as $arrProduct){
$options = array();
foreach($arrProduct['options'] as $key => $val){
$options[$key] = $val;
}
$arrProducts[$i] = array('product_id' => $arrProduct['product_id'],'qty' => $arrProduct['qty'], 'options' => $options);
$i++;
}
}
任何人都可以在此代码中看到任何经典错误吗?因为某些原因它不起作用。可能是由于$ options数组。我认为格式不好。
答案 0 :(得分:0)
如果你必须将数组作为字符串传递,我建议你使用php的json_encode
和json_decode
方法在REST路由上传递一个JSON字符串,但是有一个你需要它的数组
根据对问题的更改进行了更新:
你的代码中有这一行
foreach ($arrProductsVar['arrProducts'] as $arrProduct){
但是,用于描述数组格式的代码不会在arrProducts
$arrProductsVar
键
尝试
foreach ($arrProductsVar as $arrProduct){
答案 1 :(得分:0)
只需这样做
$arrProducts = array("arrProducts"=>array(whatever));
$dataToPost = json_encode($arrProducts);
现在在您的REST代码中,
$stringVar = $_POST['arrProducts'];
$arrProducts = json_decode($stringVar);
所以$ arrProducts包含数组格式的数据