PHP变量是通过值还是通过引用传递的?
我经常使用以下内容来获取数组中的倒数第二个值:
$z=array_pop(array_slice($array,-2,1));
Run Code Online (Sandbox Code Playgroud)
我错过了一个PHP功能一次性完成或是我最好的吗?
可能重复:
php中的数组是按值传递还是按引用传递?
我听说PHP可以选择如何分配数组,取决于数组大小.它可以通过复制值(作为任何标量类型)或通过引用进行分配.
PHP总是通过复制值将数组赋值给变量,如手册中所述.
或者它可以通过引用分配.?
<?php $a = array(1,2,3); ?>
Run Code Online (Sandbox Code Playgroud) 我有一个带有数组输入的 JS 函数。
例如:
x=[ 239709880, 250229420, 109667654, 196414465, 13098]
y=[ 78135241, 54642792, 249]
或者:
x=[ 0, 0, 0, 0, 0, 0, 1 ]
y=[ 78135241, 54642792, 249 ]
或者:
x=[ 49 ]
y=[ 33 ]
function bdiv(x,y) {
var n=x.length-1, t=y.length-1, nmt=n-t, arr = []
if(n < t || n==t && (x[n]<y[n] || n>0 && x[n]==y[n] && x[n-1]<y[n-1])) {
arr['q']=[0]
arr['mod']=x
return arr
}
if(n==t && toppart(x,t,2)/toppart(y,t,2) <4) {
var q=0, xx
for(;;) {
xx=bsub(x,y)
if(xx.length==0) break
x=xx; q++ …Run Code Online (Sandbox Code Playgroud) 我知道,在foreach中通过引用传递项目可能很危险.
特别是,必须不重用通过引用传递的变量,因为它会影响$array,如下例所示:
$array = ['test'];
foreach ($array as &$item){
$item = $item;
}
$item = 'modified';
var_dump($array);
Run Code Online (Sandbox Code Playgroud)
array(1){[0] =>&string(8)"modified"}
现在这里咬我:在函数内部修改数组的内容should_not_modify,即使我没有传递$arrayby值.
function should_not_modify($array){
foreach($array as &$item){
$item = 'modified';
}
}
$array = ['test'];
foreach ($array as &$item){
$item = (string)$item;
}
should_not_modify($array);
var_dump($array);
Run Code Online (Sandbox Code Playgroud)
array(1){[0] =>&string(8)"modified"}
我很想通过我的整个代码库并unset($item);在每个代码库之后插入foreach($array => &$item).
但是,由于这是一项重大任务并且引入了一条可能无用的线路,我想知道是否有一条简单的规则可以知道什么时候foreach($array => &$item)是安全的,而不是unset($item);在它之后,什么时候没有.
编辑以澄清
我想我明白了会发生什么以及为什么.我也知道最好做什么:foreach($array as &$item){...};unset($item);
我知道这是危险的foreach($array as &$item):
$item我的问题是:是否有其他危险的案例,我们是否可以建立一份危险的详尽清单.或者反过来说:是否有可能描述它何时不危险.
PHP中是否有一种方法可以返回对数组中元素的引用?
function ref(&$array, &$ref) { $ref = $array[1]; }
$array = array(00, 11, 22, 33, 44, 55, 66, 77, 88, 99);
ref($array, $ref);
$ref = 'xxxxxxxxxx';
var_dump($ref);
var_dump($array);
Run Code Online (Sandbox Code Playgroud)
我希望$ array会被更改,如下面的代码所示:
$array = array(00, 11, 22, 33, 44, 55, 66, 77, 88, 99);
$ref = &$array[1];
$ref = 'xxxxxxxxxx';
var_dump($ref);
var_dump($array);
Run Code Online (Sandbox Code Playgroud) 我很难尝试更新数组中的值.我做了一个简单的例子来说明这一点:数组包含了玩家的名字和他们拥有的点数.每轮结束后我想更新他们的积分,如下所示:
(这不起作用)
$players = array (
array (
"id" => 0,
"name" => "John",
"points" => 0
),
array (
"id" => 1,
"name" => "Chris",
"points" => 0
),
array (
"id" => 2,
"name" => "Peter",
"points" => 0
),
array (
"id" => 3,
"name" => "Greg",
"points" => 0
),
);
$points0 = 10;
$points1 = 20;
$points2 = 30;
$points3 = 40;
$i = 0;
foreach ($players as $player) {
if ($player["id"] == $i) { …Run Code Online (Sandbox Code Playgroud)