0

可能重复:
在多维数组中查找值

这是我的数组,它包含一个键值对数组。

[
   {
    valueA: 0,
    valueB: 0,
    day: "2010-04-09"
   },
   {
    valueA: 0,
    valueB: 0,
    day: "2010-04-10"
   }
]

我想检查某个值是否在任何索引中的键“day”处(如果是,请修改该节点中的值)

有没有一种有效的方法来做到这一点in_array

否则我想我会用嵌套的for循环来做

4

3 回答 3

1

不使用该in_array功能,但您可以使用array_filter

// assuming $myarray = Array(......);
if( $found = array_filter($myarray,function($a) {return $a['day'] == '2010-04-10';})) {
    // you can now do something with the $found array
}

编辑:刚刚看到你关于使用 PHP 5.2.2 的评论——这个版本不支持匿名函数,所以你需要这个:

if( $found = array_filter($myarray,create_function('$a','return $a["day"] == "2010-04-10";')))
于 2013-02-04T17:03:33.320 回答
1

仅循环一次并将日期设置为键

$hash = array();
foreach ( $array as $v ) {
    $hash[$v['day']][] = $v;
}

现在您可以使用issetwhich isO(1)而不是O(n) 一直使用

if (isset($hash['2010-04-10'])) {
    echo "Here";
}
于 2013-02-04T17:07:18.280 回答
0

我会改用 array_map 。这将允许您在键匹配时修改数组。array_filter 只允许填充数组。

如果您创建一个新方法(使用 5.2 和 create_function),您可以在其中指定您的逻辑。然后,将其传递给 array_map 方法以获取新的、已处理的数组。

在下面的示例中,我正在检查变量的“day”是否为“2010-04-10” - 如果是,则将该特定数组的 valueA 更改为 1。

$processArrayFunction = create_function('$a',
                                        'if ($a["day"] == "2010-04-10") {
                                            $a["valueA"] = 1;
                                        }
                                        return $a;
                                        ');

$newArray = array_map($processArrayFunction, $sourceArray);
于 2013-02-04T17:19:10.930 回答