【问题标题】:array_key_exists not working as expectedarray_key_exists 没有按预期工作
【发布时间】:2019-01-05 17:47:28
【问题描述】:

问题

我在使用 PHP 函数 array_key_exists 时遇到问题。即使我的数组有键,该函数也总是返回 false。我想知道使用动态增长的数组是否存在问题。我是 PHP 新手,如果这个问题很烦人,我很抱歉。

预期行为

如果数组有键,我需要 array_key_exists 函数返回 true。

我试图解决的问题

我尝试改用isset(CounterArray[$key]),但没有成功。

我已经阅读了特定功能的 PHP 文档,并且我还检查了有关堆栈溢出的类似问题,但没有一个适合我的情况。我是 可耻地为此花费了大量时间。

代码

$values=[
        "a"=>100,
        "a"=>100,
        "a"=>100,
        "b"=>200,   
    ];


    $counterArray = array();

    foreach ($values as $key => $price) {

        if(!array_key_exists( $key , $counterArray))){
            $counterArray[$key]=$price;

        }else{

            $counterArray[$key] += $price;

        }
    }

【问题讨论】:

  • 你不能让数组 $values 和相同的键 a 使用 3 次,因此这个脚本没有条件 array_key_exists() 应该返回 true
  • 您需要将数组更改为您实际拥有的数组。如果我们不知道您的阵列是什么样子,我们将无法回答这个问题。最好使用 var_export 或 json_encode 发布真实数组。如果我们只看到真正的数组,可能会有更快的循环方法。
  • 天哪,我太笨了!!!我需要停止加班编码。谢谢@Havenard

标签: php array-key-exists


【解决方案1】:

您的 $values 数组包含相同键 'a' 的重复项,这将被忽略。因此,$counter_array 最终将包含$values 的精确副本。

听起来$values应该是一个数组数组,例如:

$values = [
    ["a"=>100],
    ["a"=>100],
    ["a"=>100],
    ["b"=>200],
];

当然,你的循环必须相应地改变:

foreach ($values as $a) {
    list( $key, $price ) = $a;
    // ...

【讨论】:

  • 你是对的。我分心了。希望老师们不要看到!!
【解决方案2】:

这是因为你的实际数组在内部就像 数组(2) { ["a"]=> int(100) ["b"]=> int(200) 当你这样做时,你会得到高于输出 var_dump($values); 在你的代码中

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    • 2011-09-07
    • 2013-03-03
    • 2015-05-18
    相关资源
    最近更新 更多