2012-01-12 112 views
0

我有一个HTML表单,我将把所有信息发送到服务器端。我的一个领域像无法检索数组值

<option value="bus_info[{$k->bus_id},{$k->route_from},{$k->route_to}]">{$k->route_from} To {$k->route_to},{$k->bus_time}</option> 

当检查在PHP端

$bus_information[] = $_REQUEST['bid']; 

var_dump($bus_information);` 

它显示了以下结果:

array 
    0 => string 'bus_info[1,Guwahati,Amguri]' (length=27) 

现在我怎么能检索的数组中的元素?我试过echo $bus_information[0][0];,但是显示结果b!为什么如此

+1

值经由传递' $ _REQUEST ['bid']'只是一个字符串,并不像你期望的那样是一个数组(它是一个字符数组,这就是为什么'bus_information [0] [0]'返回'b'的原因,但是在这一点上不相关)。您需要解析数据以提取逗号分隔值。 – mdm 2012-01-12 12:42:41

+2

因为你所拥有的不是一个数组,它是一个*字符串*,模糊地看起来像一个数组。 – deceze 2012-01-12 12:43:40

回答

3

多维数组在HTML和PHP中不能这样工作。基于评论

<option value="bus_info[{$k->bus_id}][{$k->route_from}][{$k->route_to}]">{$k->route_from} To {$k->route_to},{$k->bus_time}</option> 

编辑:你应该在你的形式使用该

对不起,这不会在所有的工作。我假设你想让用户选择某种路线,并基于你想传递一个特定的值。该方式<select>的工作原理是:

在HTML使用:

<select name="test"> 
    <option value="1">First option</option> 
    <option value="2">Second option</option> 
</select> 

现在,在PHP中可以访问已提交这样的值:

$_REQUEST['test'] //this value will be 1 if the user 
        //selected the first option, or 2 if 
        //he selected the second 

您可以使用在输入字段的名称阵列,所以这将有可能在HTML中做这样的事情:

<select name="test[1]"> 
    <option value="1">First option</option> 
    <option value="2">Second option</option> 
</select> 
<select name="test[2]"> 
    <option value="1">First option</option> 
    <option value="2">Second option</option> 
</select> 

请注意,我在name属性上使用了数组表示法,而不是数值。现在你可以在PHP中做到这一点:

$_REQUEST['test'][1] //this value will be 1 if the user 
        //selected the first option, or 2 if 
        //he selected the second in the first 
        //drop down 
$_REQUEST['test'][2] //this value will be 1 if the user 
        //selected the first option, or 2 if 
        //he selected the second in the second 
        //drop down 

你做那么,用在value属性阵列将无法工作。你可以做这样的事情:

<select name="bus_info"> 
    <option value="{$k->bus_id},{$k->route_from},{$k->route_to}">{$k->route_from} To {$k->route_to},{$k->bus_time}</option> 
</select> 

然后在PHP:

$values = explode($_REQUEST['bus_info']); 
//now $values is an array with 3 elements, the ID, the route_from and route_to 
+0

谢谢。但是当我'var_dump($ _ REQUEST ['bus_info']);',它显示'null'! – Nitish 2012-01-12 12:49:00

0

由于var_dump()告诉你,你HAVA的字符串,而不是一个数组,意味着你需要使用正则表达式或拆分字符串例如像:

只打印里面的内容[]像:

<option value="{$k->bus_id},{$k->route_from},{$k->route_to}">{$k->route_from} To {$k->route_to},{$k->bus_time}</option> 

然后,您可以通过以下获取数组:

$parts = explode(',', $bus_information); 
1

$_REQUEST['bid']只是一个字符串,而不是一个数组。

你可以使用一些PHP的字符串函数,虽然将其转换为一个数组:

$result = $_REQUEST['bid']; 
$result = strstr($result, '['); 
$result = trim($result, '[]'); 
$array = explode(',' $result); 

但我个人有一个映射到我的服务器端数据的数值。

+0

谢谢jeroen ... – Nitish 2012-01-12 12:57:55

1

这会给你一个值数组你正在寻找:

在选项值字段删除阵列封装:

<option value="{$k->bus_id},{$k->route_from},{$k->route_to}">{$k->route_from} To {$k->route_to},{$k->bus_time}</option> 

现在,您将得到一个字符串与工作当表单提交:

$bus_info_string = $_REQUEST['bid']; 

echo($bus_info_string); 

的字符串看起来像:

'1,Guwahati,Amguri' 

爆炸串

现在使用PHP的explode方法。此字符串的值转换成一个数组:

$bus_info_array = explode(",", $bus_info_string); 

阵列看起来像这样:

Array 
(
    [0] => 1 
    [1] => 'Guwahati' 
    [2] => 'Amguri' 
) 

现在访问的单个元件,简单地使用:

echo $bus_info_array[0]; // Bus Id 
echo $bus_info_array[1]; // Route From 
echo $bus_info_array[2]; // Route To