长度未知的PHP数组,初始值为0

时间:2013-07-15 18:29:57

标签: php arrays

我有PHP $_SESSION数组,这些数组有不确定数量的元素。是否可以将所有值初始化为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;
}

它似乎有效。谢谢fellas!

7 个答案:

答案 0 :(得分:1)

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

$keys   = array('foo', 'bar', 'baz');
$output = array_fill_keys($keys, 0);

答案 1 :(得分: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 )

答案 2 :(得分:0)

$_SESSION仅包含的内容。只需确保在首次添加内容时添加0而不是null

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

答案 3 :(得分:0)

PHP数组实际上不是您可能从其他语言中获知的数组。它们实际上更像是具有散列访问权限的链接列表。

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我使用array_key_exists()检查索引是否已设置。如果不是,我显示0或在该字段中添加商店某个值,否则我会显示该索引的值或向该字段添加特定值。

归功于Sven提出这个问题。

答案 6 :(得分:-1)

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

foreach($_SESSION as $x=>$y)
{
       if(empty($x)) { //do something }
 }