【问题标题】:php compare/match range of valuesphp比较/匹配值的范围
【发布时间】:2011-09-27 15:04:25
【问题描述】:

我有一个数组,我需要比较 mysql 中的数据。通常我会做一个直接比较,所以我可以做一个if ($array[$i]===$mysql[$i]),但我确实有一个实例需要将它与一系列数字(例如18-19、20-24等)进行匹配。我查看了 preg_match 和 preg_grep,但它们似乎不是我想要的……

我只需要比较的真/假结果。

我尝试匹配的数组部分如下所示:

"age"=>array(
        '18-19'=>array('total'=>0,'completed'=>0),
        '20-24'=>array('total'=>0,'completed'=>0),
        '25-29'=>array('total'=>0,'completed'=>0),
        '30-34'=>array('total'=>0,'completed'=>0),
        '35-39'=>array('total'=>0,'completed'=>0),
        '40-44'=>array('total'=>0,'completed'=>0),
        '45-49'=>array('total'=>0,'completed'=>0),
        '50-54'=>array('total'=>0,'completed'=>0),
        '55-59'=>array('total'=>0,'completed'=>0)
),"race"=>array(
        "White"=>array('total'=>0,'completed'=>0),
        "Black"=>array('total'=>0,'completed'=>0),
        "Hispanic"=>array('total'=>0,'completed'=>0),
        "Asian"=>array('total'=>0,'completed'=>0),
        "Pacific Islander"=>array('total'=>0,'completed'=>0),
        "Multiracial"=>array('total'=>0,'completed'=>0),
        "Other"=>array('total'=>0,'completed'=>0)
)

有没有干净的方法来做到这一点?

谢谢!

【问题讨论】:

  • 你为什么不从你的数据库数据中构建一个类似于$array 架构的数组,最后尝试if($array==$mysqldata)?顺便说一句……你的桌子怎么样?

标签: php multidimensional-array match associative-array


【解决方案1】:
list($min,$max) = explode('-', $array[$i]);
if ($mysql[$i] >= $min && $mysql[$i] <= $max) ...

【讨论】:

  • @nachito:谢谢。我坚持KISS principle。 :-)
  • @jacob:哎呀!我的变量倒退了。固定。
  • 我喜欢KISS。附言切换这些变量很有帮助,哈哈
  • @jacob:是的,KISS rocks! :-D
【解决方案2】:

PHP 的 range() function 可能有用:

foreach ($array['age'] as $ageRange => $something) {
    list($start, $limit) = explode('-', $ageRange);
    foreach (range($start, $limit) as $age) {
        // compare
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多