我在php中使用foreach函数时遇到了麻烦。我搜索了一些教程,但仍然无法理解它是如何工作的。请有人帮助我。
我有一个这样的textarea
字符串,这个字符串是$g_userselect
.
+----------------+
| 1000|10 |
| 2000|40 |
| 3000|80 |
+----------------+
我想将其分离到我的<form><select>
函数中。
<select name="select" id="select">
<option value="1000">Cost 10</option>
<option value="2000">Cost 40</option>
<option value="3000">Cost 80</option>
</select>
我喜欢这个:
$data=explode("'n",$g_userselect);
foreach ($data as $key => $value){
list($value['quantity'], $value['select']) = split ('|', $data);
}
并像这样循环:
<select name="select" id="select">
<!--{loop $data $value}-->
<option value="{$value[quantity]}">Cost {$value[select]}</option>
<!--{/loop}--></select>
但只向我展示为:
<select name="select" id="select">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
你可以再做一个简单的爆炸来得到每行的两半。
当您的foreach创建一个名为$value
的变量并且您的list()
正在将数据加载到名为$value
的数组时,您也会遇到问题。由 foreach 外观创建的$value
是瞬态的,即每次围绕 foreach 循环重复使用。
$newvalues = array();
$data=explode("'n",$g_userselect);
foreach ($data as $key => $value){
$bits = explode('|',$value);
$t = array('quantity' => $bits[0], 'select' => $bits[1]);
$newvalues[] = $t;
}
print_r($newvalues);
给出这个结果
Array
(
[0] => Array
(
[quantity] => 1
[select] => 1000
)
[1] => Array
(
[quantity] => 2
[select] => 2000
)
[2] => Array
(
[quantity] => 3
[select] => 3000
)
)
警告:split() 从 PHP5.3 开始被弃用
当你想更改 foreach
内数组的值时,您需要遍历其引用:
$data=explode("'n",$g_userselect);
foreach ($data as $key => &$value){
list($value['quantity'], $value['select']) = explode('|', $value);
}
请注意 $value
之前的&
。
您必须拆分$value
而不是$data
并且在那里更好地使用explode()
,因为split()
自 PHP 5.3 以来DEPRECATED
$g_userselect = array('1000|10', '2000|40', '3000|80');
foreach ($g_userselect as $k => $v){
$a = explode('|', $v);
$options = "<option value=$a[0]>Cost $a[1]</option>";
}
.HTML:
<select name="select" id="select">
<?=$options ?>
</select>
输出:
<select name="select" id="select">
<option value="1000">Cost 10</option>
<option value="2000">Cost 40</option>
<option value="3000">Cost 80</option>
</select>