参考是将项目添加到数组
Reference is adding item to array
我有以下方法,你传入一个项目列表,第一个项目是你想看的是否存在,后面的项目是项目的路径。
下面我有 2 个 print_r
语句,一个在 for
之前,一个在它之后。
public function exists(){
$keys = func_get_args();
$value = array_shift($keys);
$ref = &$_SESSION;
print_r($_SESSION);
for($x = 0; $x < sizeof($keys); $x++){
$ref = &$ref[$keys[$x]];
}
print_r($_SESSION);
if(!is_array($ref)){
unset($ref);
return false;
}
$found = in_array($value, $ref);
unset($ref);
return $found;
}
当我这样称呼它时:
$obj->exists(123, "cart");
我从那些 print_r
中得到这两个数组:
Array
(
[id] => 1
[email] => xxx@xxx.com
[user] => TheColorRed
[first] => Billy
[last] => Bob
[ZingLoggedIn] => 1
)
Array
(
[id] => 1
[email] => xxx@xxx.com
[user] => TheColorRed
[first] => Billy
[last] => Bob
[ZingLoggedIn] => 1
[cart] =>
)
我的问题是,为什么要将 cart
添加到数组中?它应该只检查它是否存在。
这是对数组元素使用引用的副作用;如果该元素不存在,则会创建它。之后的 unset()
不会改变这一点。考虑不使用参考资料;由于您只是在读取值,因此不应发生写时复制:
public function exists()
{
$keys = func_get_args();
$value = array_shift($keys);
$ref = $_SESSION;
foreach ($keys as $key) {
if (!isset($ref[$key])) {
return false;
}
$ref = $ref[$key];
}
return is_array($ref) && in_array($value, $ref);
}
我有以下方法,你传入一个项目列表,第一个项目是你想看的是否存在,后面的项目是项目的路径。
下面我有 2 个 print_r
语句,一个在 for
之前,一个在它之后。
public function exists(){
$keys = func_get_args();
$value = array_shift($keys);
$ref = &$_SESSION;
print_r($_SESSION);
for($x = 0; $x < sizeof($keys); $x++){
$ref = &$ref[$keys[$x]];
}
print_r($_SESSION);
if(!is_array($ref)){
unset($ref);
return false;
}
$found = in_array($value, $ref);
unset($ref);
return $found;
}
当我这样称呼它时:
$obj->exists(123, "cart");
我从那些 print_r
中得到这两个数组:
Array
(
[id] => 1
[email] => xxx@xxx.com
[user] => TheColorRed
[first] => Billy
[last] => Bob
[ZingLoggedIn] => 1
)
Array
(
[id] => 1
[email] => xxx@xxx.com
[user] => TheColorRed
[first] => Billy
[last] => Bob
[ZingLoggedIn] => 1
[cart] =>
)
我的问题是,为什么要将 cart
添加到数组中?它应该只检查它是否存在。
这是对数组元素使用引用的副作用;如果该元素不存在,则会创建它。之后的 unset()
不会改变这一点。考虑不使用参考资料;由于您只是在读取值,因此不应发生写时复制:
public function exists()
{
$keys = func_get_args();
$value = array_shift($keys);
$ref = $_SESSION;
foreach ($keys as $key) {
if (!isset($ref[$key])) {
return false;
}
$ref = $ref[$key];
}
return is_array($ref) && in_array($value, $ref);
}