php - 通过引用 php
问题描述
所以我正在学习按引用传递,我不明白的是,我需要在函数上使用按引用传递吗?像这样
$items = [1,2,3,4,5];
function my_func(&$items) {
$items[] = 6;
}
my_func($items);
var_dump($items);
它会输出
array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
我见过人们像这样通过引用向数组添加值
class play {
public function test() {
$items = [1,2,3,4,5];
foreach($items as &$item) {
$item[] = 6;
}
return $items;
}
}
$play = new play;
$play->test();
然后我得到警告:
不能将标量值用作数组
循环中有没有办法通过函数外部的引用来添加值?
解决方案
看来你误解了代码在做什么......
你有一个数组...
$array = [1,2,3,4,5,6];
...可以重写为...
$array = [
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
5 => 6,
];
// Hint: try print_r($array);
...左边keys
的数字是 ,右边的数字是values
。
您的循环一次循环遍历数组一行:
foreach ($array as $item) {
echo $item;
}
// Output: 123456
现在,如果您添加“按引用传递”运算符,那么您可以编辑$item
;的值 例如,我们可以将数组中的每个项目1
转换为...
foreach ($array as &$item) {
$item = 1;
}
print_r($array);
/* Output:
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1
)
*/
如果没有&
前面$item
的代码,只会改变循环$item
内部的值。foreach
原始数组不会被触及。
您收到错误的原因是因为您正在分配一个值,$item
就好像它是一个数组一样。实际上,$item
变量是整数。因此,要使其正常工作,您需要做的就是删除[]
分配行中的 :
$item[] = 6;
// Becomes...
$item = 6;
如果您想要添加一个值而不是替换一个值,那么您可以这样做。但是您需要向数组中添加一个值,它不是:$items
$item
$items[] = 6;
当然,在循环中执行此操作将为数组中的每个项目添加一次值......
推荐阅读
- yocto - Yocto 没有为一个自定义配方使用配置的镜像
- github - 运行 git push 的问题
- c# - 如何正确更新(添加/更新/删除)实体的相关数据(EF Core)
- javascript - 高效阅读 Javascript
- javascript - 在快速查询字符串解析值上获取数字和布尔类型有什么好处?
- java - 如何从 void 方法返回
- amazon-web-services - AWS SQS FIFO 队列:队列应该启用 ContentBasedDeduplication 还是显式提供 MessageDeduplicationId?
- swiftui - iOS - Swift 5 - 标签文本未在循环内更新
- swift - 敬畏中的无效转义字符串文字
- c# - 为什么 Distinct (Linq) 在 int [] 列表中不起作用?