Jep*_*ppe 127 php arrays foreach
我是多维数组中的新手,这让我很烦恼.
我的数组如下:
$fields = array(
"names" => array(
"type" => "text",
"class" => "name",
"name" => "name",
"text_before" => "name",
"value" => "",
"required" => true,
)
)
Run Code Online (Sandbox Code Playgroud)
然后我得到一个函数检查是否填写了这些输入,如果需要的话.
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是这一行
$fields[$field]['value'] = "Some error";
Run Code Online (Sandbox Code Playgroud)
我想更改原始数组的内容,因为我正在返回它,但是如何在foreach循环中获取当前数组的名称(本例中的名称)?
Vla*_*eda 233
在PHP中,通过引用(&
)传递是有争议的.我建议不要使用它,除非你知道为什么需要它并测试结果.
我建议你做以下事情:
foreach ($fields as $key => $field) {
if ($field['required'] && strlen($_POST[$field['name']]) <= 0) {
$fields[$key]['value'] = "Some error";
}
}
Run Code Online (Sandbox Code Playgroud)
因此,基本上$field
在需要值时使用,以及$fields[$key]
何时需要更改数据.
Dha*_*man 139
用途&
:
foreach($arr as &$value)
{
$value = $newVal;
}
Run Code Online (Sandbox Code Playgroud)
&
传递数组的值作为引用,并不创建变量的新实例.因此,如果更改参考,原始值将更改.
http://php.net/manual/en/language.references.pass.php
编辑2018
这个答案似乎受到互联网上很多人的青睐,这就是为什么我决定添加更多信息和谨慎的话.
虽然在foreach
(或函数)中通过引用是一个干净而简短的解决方案,但对于许多初学者来说,这可能是一个危险的陷阱.
PHP中的循环没有自己的范围. - @Mark Amery
当变量在同一范围内重用时,这可能是一个严重的问题.另一个SO问题很好地说明了为什么这可能是一个问题.
由于foreach依赖于PHP 5中的内部数组指针,因此在循环中更改它可能会导致意外行为. - foreach的PHP文档
在同一循环的迭代期间取消设置记录或更改哈希值(键)可能会导致PHP <7中的潜在意外行为.当阵列本身是引用时,问题会变得更加复杂.
Foreach表现.
通常,由于写时复制功能,PHP更喜欢按值传递.这意味着内部PHP不会创建重复数据,除非需要更改它的副本.是否通过引用foreach
提供性能改进是有争议的.总是如此,您需要测试您的特定方案并确定哪个选项使用更少的内存和CPU时间.有关更多信息,请参阅NikiC下面链接的SO帖子.
代码可读性.
在PHP中创建引用很快就会失控.如果您是新手并且无法完全控制您正在做的事情,最好远离参考.有关&
运算符的更多信息,请查看本指南:参考 - 此符号在PHP中的含义是什么?
对于那些想要了解PHP语言的这一部分的人:PHP参考资料解释
@NikiC对PHP foreach循环内部逻辑的一个非常好的技术解释:
PHP的'foreach'实际上是如何工作的?
归档时间: |
|
查看次数: |
162116 次 |
最近记录: |