2012-05-16 48 views
-1

我已经看到了问题,如this,但如果我给你一个键值对为空数组LIK这添加键值阵列而不会触发阵列

$arr[$key] = $value; 

我得到的PHP通知

Notice: Undefined index: <key> in <path> 

其中当然<key>的是什么价值在$关键。 如何在不触发通知的情况下将值分配给新密钥?

谢谢!

编辑:继承人更精确的代码。这正是我的代码中的内容。这有什么区别?

while(list($k, $sum) = mysql_fetch_row($res)) { 
    if($sum < 0) { 
    $churn[$k] += $sum; 
    } 
} 
+0

以及var $ key的确切位置?为什么[$ value]在方括号内? – Elen

+1

你是否像这样分配变量:'$ arr ['foo'] ='bar';'?这是正确的方法来做到这一点... –

+0

对不起,括号里面的$值出现错字,我没有他们在我的代码中.. – Nareille

回答

2

声明您阵列之前addind关键

$arr = array(); 
$arr[$key] = $value; 

或者干脆

$arr = array($key=>$value); 
+1

这是正确的答案 –

+0

除了声明一个数组之前使用它是完全没有必要的,而不是错误@nareille已经使 – AD7six

+1

它只是正确的方式做它 –

1

你是什么意思[$value]

你正在试图获得的价值带给定键的全新阵列

+0

Sebas,对不起,括号里有错别字 – Nareille

+0

哦,这就是为什么然后:-)好吧 – Sebas

1

您的语法不正确。试试我的快速测试用例,它不会引起任何注意。在

while(list($k, $sum) = mysql_fetch_row($res)) { 
    if($sum < 0) { 
    $churn[$k] += $sum; 
    } 
} 

<?php 
    error_reporting(E_ALL); 

    $array = array(); 
    $key = 'new_key'; 
    $value = 'new_value'; 
    $array[$key] = $value; 

    echo '<pre>'; 
    var_dump($array); 
    exit; 
?> 
0

问题奠定由于+ =运算符。第一次,它被调用,churn ['whateverWasIn $ k']没有设置。第二次是罚款,但是..所以要摆脱通知,它必须是这样的:

(!isset($churn[$k])) ? $churn[$k] = $sum : $churn[$k] += $sum; 

在中间语句中实现缺少+。所以如果这个关键字不存在的时候,我想增加$ sum,声明它并给它$ sum的值,否则只需要将$ sum添加到当前值。

就是这样。它在代码中看起来并不漂亮,但它让我摆脱了200条通知。在我看来,这也不算太好。

感谢您的帮助。