爆炸后如何获取数组值?

时间:2013-05-29 15:00:46

标签: php arrays explode

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

这是我的阵列:

$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\" />&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 EXTRACT

$ cost_ss $ cost_nr 是从数据库查询循环中派生的。

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

6 个答案:

答案 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);,它将为您提供阵列