1

我已经在数组中将一个值从一个页面传递到另一个页面。我可以通过explode 提取前两个变量,但我无法得到在数组中形成的第三个值。

这是我的数组:

$user_rate=$_POST['user_rate'];//15000|ss|Array
list($total,$promo,$rate)=explode("|",$user_rate);

所以我得到:

$total=15000;
$promo=ss;
$rate=Array;

While 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\" />&nbsp;<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/>&nbsp;<u><b>".number_format($net_total)."</b></u></label></td>
</tr>";

并且这种格式的值不能改变,因为我需要它用于以后的 JAVASCRIPT 提取

$cost_ss$cost_nr来自数据库查询循环。

while($rec=mysql_fetch_array($result)){
$cost_ss[]=$rec['rate_ss'];
$cost_nr[]=$rec['rate_nr'];
}
4

6 回答 6

2

这可能是一个错误$user_rate=$_POST['user_rate'];//15000|ss|Array

你可以使用serialize / unserialize数组

于 2013-05-29T15:04:10.007 回答
1

您可以将页面上的值编码为

implode("|", array($total, $promo, implode(",",$rate));

然后用它解码

list($total, $promo, $rates) = explode("|", $_POST["user_rate"]);
$rates = explode(",", $rates);
于 2013-05-29T15:13:57.660 回答
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 和反序列化:

$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>";

我希望你现在明白了。

于 2013-05-29T15:02:57.200 回答
1

使用 serialize 绝对是让它工作的关键,但是 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是一个函数数组

于 2013-05-29T15:39:54.683 回答
1

您可以serialize在传递数组参数之前将其传递。然后unserialize他们在第 2 页。

$rate = serialize($rate);

在您通过循环运行之前的第二页:

$rate = unserialize($rate);
于 2013-05-29T15:02:20.270 回答
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);它会给你你的阵列

于 2013-05-29T15:09:23.170 回答