【问题标题】:PHP array - Find values in keys and valuesPHP数组 - 在键和值中查找值
【发布时间】:2015-03-13 14:35:40
【问题描述】:

我有一些数据。

首先我有几天,例如:

1、15、30、60、90

然后我有价格组,例如:

简单、专业、精英、专家、新星

然后我将每个价格组的成本(价值数字)与天数相结合:

$array = array(
  'day_1_simple' => 1000,
  'day_15_simple' => 2100,
  'day_30_simple' => 5600,
  'day_1_pro' => 900,
  'day_60_pro' => 1700,
  'day_90_pro' => 1900,
  'day_1_elite' => 10,
  'day_30_elite' => 200,
)

问题:

  • 如何获取仅从第一天开始的所有值?
  • 如何仅从 pricegroup pro 获取所有值?

【问题讨论】:

  • 一个问题:你尝试了什么?

标签: php arrays matrix


【解决方案1】:

你可以用另一种方式构造你的数组吗?

$array = array(
    1 => array(
             "simple" => 1000,
             "pro" => 5600,
         ),
    15 => array(
             "simple" => 2100,
             "pro" => 12000,
         ),
);

如果你能做到这一点,那么你可以使用索引或数组函数来准确找到你需要的东西

【讨论】:

    【解决方案2】:

    如果你有 php5.6 使用 array_filter 函数和 ARRAY_FILTER_USE_KEY 参数:

    $array = array();
    
    // consider day 1 is _1_ in a key
    $day_one = array_filter($array, function($k) {
        return strpos($k, '_1_') !== false;
    }, ARRAY_FILTER_USE_KEY);
    
    // consider pro is _pro in a key
    $only_pro = array_filter($array, function($k) {
        return strpos($k, '_pro') !== false;
    }, ARRAY_FILTER_USE_KEY);
    

    这甚至可以简化为单一功能:

    $filter = '_1_';    // for example
    $filtered = array_filter($array, function($k) use ($filter) {
        return strpos($k, $filter) !== false;
    }, ARRAY_FILTER_USE_KEY);
    

    如果你的 php 不是 5.6,那么做一个简单的 foreach

    $array = array();
    // consider day 1 is _1_ in a key
    $day_one = array();
    foreach ($array as $k => $v)
        if (strpos($k, '_1_') !== false)
            $day_one[$k] = $v;
    
    // consider pro is _pro in a key
    $only_pro = array();
    foreach ($array as $k => $v)
        if (strpos($k, '_pro') !== false)
            $only_pro[$k] = $v;
    

    【讨论】:

      【解决方案3】:

      这可以作为使用preg_match的解决方案,尝试这种方式过滤day_1pricegroup pro数组

      $day_1=[];
      $price_group_pro=[];
      foreach (array_keys($array) as $key) {
          if (preg_match('/^day_1_/', $key)) {
              $day_1[$key]=$array[$key];
          }
          if (preg_match('/_pro$/', $key)) {
              $price_group_pro[$key]=$array[$key];
          }
      }
      
      echo '<pre>';
      print_r($day_1)
      print_r($price_group_pro);
      echo '</pre>';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        相关资源
        最近更新 更多