【问题标题】:How can I tell if the value of any array key is the value I'm looking for?如何判断任何数组键的值是否是我正在寻找的值?
【发布时间】:2010-10-01 05:13:50
【问题描述】:

我有一个这样的数组:

$cart = Array ( 
[0] => Array ( [TypeFlag] => S [qty] => 2 [denom] => 50  [totalPrice] =>  100 )
[1] => Array ( [TypeFlag] => V [qty] => 1 [denom] => 25  [totalPrice] => 25 ) 
[2] => Array ( [TypeFlag] => C [qty] => 1 [denom] => 25  [totalPrice] => 25 ) 
) 

有没有什么办法,除了循环遍历所有这些并一次检查一个,以确定其中任何一个的 TypeFlag 值是否为 S?

【问题讨论】:

  • 你想知道所有设置为“S”的,还是至少有一个是?
  • 我只需要知道其中是否至少有一个是,下面发布的两个答案都能满足我的需求。

标签: php arrays key-value


【解决方案1】:

试试这个:

foreach($cart as $key => $value) {
    if ($value['TypeFlag'] == 'S') {
        return $key;
    }
}

这将返回具有TypeFlag 值为S 的子数组的键。但是,这将在找到与您的搜索模式匹配的第一个子数组后停止。不确定您想要的输出是什么以及预期有多少结果。如果你能提供更多信息,我可以给你一个更准确的例子。

【讨论】:

  • 仍然使用循环,除非 OP 只是想避免循环每个嵌套级别。
  • 啊,我的错。我读的是 sort of loop 而不是 short of loop o.O
  • @BoltClock 是独角兽——是的,我真的只是想避免循环遍历每个级别。我什至不需要归还钥匙;如果其中任何一个匹配,我只是将布尔值设置为 true。虽然如果有某种方法可以做到完全不循环,那也太棒了。
  • 没问题 - 它仍然满足我避免循环遍历每个嵌套数组的愿望。
  • @EmmyS:很高兴能帮上忙! :)
【解决方案2】:

给定一个为数组的每个元素返回 TypeFlag 的函数:

function get_type_flag($item) {
    return $item["TypeFlag"];
}

您可以将该函数应用于数组中的每个元素:

$typeflags = array_map("get_type_flag", $cart);

并查看S 是否在该数组中:

if (in_array("S", $typeflags)) {
    ...
}

【讨论】:

  • 我来看看这个;我以前从未使用过array_map。
  • 我只想指出(在其他人之前!)这仍然会遍历所有数组元素,以便为每个元素提取TypeFlag。这种测试至少一个S 的方法使用了编程的函数式风格,这比手动编码的for 循环、标志(指示您是否找到S)和一个break(一旦找到S就停止迭代)。
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2016-12-06
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
相关资源
最近更新 更多