我已将数据从一个页面传递到另一个页面。我可以通过爆炸提取前两个变量,但是我无法获得在数组中形成的第三个值。
这是我的阵列:
$user_rate=$_POST['user_rate'];//15000|ss|Array
list($total,$promo,$rate)=explode("|",$user_rate);
所以我得到了:
$total=15000;
$promo=ss;
$rate=Array;
虽然Array来自上一页,它循环每日费率并放入一个数组。我需要知道每个费率是多少,所以我写道:
foreach($rate as $val){
echo "$val<br>";
}
但它没有显示任何内容。我怎么能得到这个?
更新:这是发送var之前的代码。
echo "
<tr>
<td align=\"right\" colspan=\"3\">Total</td>
<td align=\"right\"><label for=\"promo_3\"><input type=\"radio\" name=\"user_rate\" id=\"promo_3\" value=\"$ss_total|ss|$cost_ss\" /> <u><b>".number_format($ss_total)."</b></u></label></td>
<td align=\"right\"><label for=\"promo_1\"><input type=\"radio\" name=\"user_rate\" id=\"promo_1\" value=\"$net_total|nc|$cost_nr\" checked/> <u><b>".number_format($net_total)."</b></u></label></td>
</tr>";
并且这种价值形式无法改变,因为我需要更快的JAVASCRIPT EXTRACT
$ cost_ss 和 $ cost_nr 是从数据库查询循环中派生的。
while($rec=mysql_fetch_array($result)){
$cost_ss[]=$rec['rate_ss'];
$cost_nr[]=$rec['rate_nr'];
}
答案 0 :(得分:2)
这可能是错误的$user_rate=$_POST['user_rate'];//15000|ss|Array
您可以将serialize / unserialize
用于数组
答案 1 :(得分:1)
在传递数组参数之前,您可以serialize
。然后在第2页上unserialize
。
$rate = serialize($rate);
在循环运行之前的第二页上:
$rate = unserialize($rate);
答案 2 :(得分:1)
在提交表单之前,您有一个数组$ rate:
foreach($rate as $val){
echo "$val<br>";
}
并且您想要添加$ ss_total和字符串“ss”并提交它 所以你需要:
$newarray = array('rate'=>$rate, 'type'=>'ss', 'ss_total'=>$ss_total);
// now you have a 2-dimensional array ($newarray)
// the next step is to prepare it for form-submitting (serialize and base64_encode):
$stringvalue = base64_encode(serialize($newarray));
// ok, now you are able to submit it as radio-field-value:
echo '<input type="radio" name="user_rate" id="promo_3" value="'.$stringvalue.'" />';
当提交表单时,你会在$ _POST ['user_rate']中获得一个序列化和编码的字符串,如果你想看看它的样子,你可以做一个回声。
现在你需要base64_decode和unserialize:
$arr = unserialize(base64_decode($_POST['user_rate']));
您现在可以完全访问您的阵列了:
echo $arr['type']."<br />";
echo $arr['ss_total']."<br />";
echo $arr['rate']['index_of_rate']; // i dont know the keys of rate array...
在javascript中访问$ arr:
echo "<script>";
echo "var jsarr = ".json_encode($arr).";\n";
echo "alert(jsarr.ss_total);\n";
echo "</script>";
我希望你现在能得到它。
答案 3 :(得分:1)
您可以将页面上的值编码为
implode("|", array($total, $promo, implode(",",$rate));
然后用
解码list($total, $promo, $rates) = explode("|", $_POST["user_rate"]);
$rates = explode(",", $rates);
答案 4 :(得分:1)
使用序列化绝对是实现此功能的关键,但base64_encode()是理想方式,可以减少混淆。当您只使用序列化时,您会得到分号,逗号,双引号,单引号和其他几个字符,当您将它们传递给重新组装它的脚本时,这些字符可能会导致问题。
例如, 在序列化数组之后,你会得到这个,就像Sidux指出的那样
a:3:{i:0;s:4:"toto";i:1;s:4:"titi";i:2;a:2:{i:0;s:4:"coco";i:1;s:4:"cici";}}
当您将base64_encode添加到混音中时,您将获得更容易使用的值。
YTozOntpOjA7czo0OiJ0b3RvIjtpOjE7czo0OiJ0aXRpIjtpOjI7YToyOntpOjA7czo0OiJjb2NvIjtpOjE7czo0OiJjaWNpIjt9fQ==
通过这种方式,您可以轻松发送/接收已保存的数组,而无需进行任何修剪,添加斜线等。
假设您以这种方式发送数据,您的新代码将如下所示
$user_rate=$_POST['user_rate'];//15000|ss|Array
list($total,$promo,$rate)=explode("|",$user_rate);
$rate = unserialize( base64_decode($rate) );
现在,$rate
是一个功能数组
答案 5 :(得分:0)
嗨我认为我理解你的问题,当你从字符串中传递和数组尝试“序列化”它并在另一页中“反序列化”时,例如:
$array = serialize(array('toto', 'titi', array('coco', 'cici')));
会给你这样的东西
a:3:{i:0;s:4:"toto";i:1;s:4:"titi";i:2;a:2:{i:0;s:4:"coco";i:1;s:4:"cici";}}
如果您使用unserialize($array);
,它将为您提供阵列