我有一些数据。
首先我有几天,例如:
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_1
并pricegroup 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>';