-1

我有$_SESSION包含未定义元素数量的 PHP 数组。是否可以将所有值初始化为 0,还是NULL每次检查值时都必须检查该值是否为然后设置为 0?

编辑:我很抱歉我的问题含糊不清。我有未定义的级别,我想将每个级别的所有分数存储在该数组中。目前我的关卡数量是固定的,所以我现在只是在写:

$_SESSION['totals'] = array(0,0,0,0,0);

然后在添加操作数据时,我只需向该元素增加/添加一定数量。

现在我更喜欢直接为某些元素增加/添加值,而不需要检查一个值是否为 NULL 或类似的东西......

编辑2:编辑我的代码如下:

$_SESSION['totals'] = array();    
if(array_key_exists($row['level']-1,$_SESSION['totals'])){
    $_SESSION['totals'][$row['level']-1]++;
}else{
    $_SESSION['totals'][$row['level']-1] = 1;
}

它似乎有效。谢谢各位!

4

7 回答 7

1

您可以使用array_fill_keys函数为定义的键填充指定值的数组:

$keys   = array('foo', 'bar', 'baz');
$output = array_fill_keys($keys, 0);
于 2013-07-15T18:34:09.920 回答
1

定义具有初始值的数组就是定义具有长度的数组。这不会阻止您在数组中添加或删除元素:

// initial array
$myArray = [0, 0, 0, 0];
print_r($myArray); // would output Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0)

$myArray[] = 1;
print_r($myArray); // would output Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 1 )
于 2013-07-15T18:36:18.867 回答
0

$_SESSION仅包含放入其中的内容。只需确保添加0而不是null第一次添加内容。

如果您以后需要这样做,我认为您的设计可能很糟糕。但无论如何,$_SESSION它就像一个普通的数组,所以你可以使用 PHP 的数组函数来遍历数组并检查或更改每个值。

于 2013-07-15T18:33:51.043 回答
0

PHP 数组并不是您可能从其他语言中知道的真正数组。它们实际上更像是具有哈希访问权限的链表。

这意味着:您要么知道要使用的所有字符串数组索引,要么确保它们存在,要么在每次访问它们时检查它们的存在,这可能会失败。

对于数字索引,同样适用。您可能有一个包含索引 1、2 和 4 的数组,但如果您只使用for循环运行它,您将在访问不存在的元素 3 时触发通知。

foreach每当你想迭代数组时使用循环。isset()每当您想记录数组值可能不存在时,请检查。如果您知道或假设必须存在数组元素,请不要这样做 - 如果不存在,您会收到通知提醒您的代码正在处理的数据结构不是您认为的那样。这实际上是一件好事。然后修复它。:)

于 2013-07-15T18:36:49.680 回答
0

最好的办法是通过创建外观方法或围绕会话变量的 getter 和 setter 来抽象会话内容,而不是直接访问它们。这样,如果您所追求的不存在,您可以返回一个默认值。

于 2013-07-15T18:37:13.690 回答
0

我曾经array_key_exists()检查过是否设置了索引。如果不是,我0在该字段中显示或添加存储某个值,否则我显示该索引的值或向该字段添加某个值。

感谢 Sven提出这一点。

于 2013-07-29T23:59:21.593 回答
-1

要检查您在会话中的内容,请循环播放它。不确定这是否是你要问的。

foreach($_SESSION as $x=>$y)
{
       if(empty($x)) { //do something }
 }
于 2013-07-15T18:38:49.673 回答