PHP 数组 - 查找键和值中的值


PHP array - Find values in keys and values

我有一些数据。

首先我有几天,例如:

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,
)

问题:

  • 如何仅从第 1 天开始获取所有值?
  • 如何仅从价格组专业版获取所有值?

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

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

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

如果你有 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;
这可以

作为使用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>';