我有以下数组:
Array
(
[0] => Array
(
[year] => 1
[month] => Array
(
[0] => Array
(
[month] => 2
[value] => 600
)
[1] => Array
(
[month] => 3
[value] => 600
)
[2] => Array
(
[month] => 4
[value] => 600
)
)
)
[1] => Array
(
[year] => 5
[month] => Array
(
[0] => Array
(
[month] => 6
[value] => 80
)
[1] => Array
(
[month] => 7
[value] => 90
)
[2] => Array
(
[month] => 8
[value] => 100
)
)
)
)
并且我也有一个10年的foreach,也是每个月的foreach。像这样:
foreach (range(1, 10) as $year) {
foreach (range(1, 12) as $month) {
$value = $month;
}
}
现在问题是如何将数组与foreach匹配,如果数组中的$ year和$ month更改$ value,并且如果数组中的年/月组合$ value值需要是阵中那个月的那个。
答案 0 :(得分:0)
你的问题很模糊,但这可能对你有所帮助。这将通过您的年/月数组,检查年份是否对应,如果是,它将检查月份是否匹配,如果是显示值。
年和月范围将匹配您的所有数据数组条目。
foreach (range(1, 10) as $year) {
foreach (range(1, 12) as $month) {
foreach($ar as $row){
if ($row['year'] == $year){
foreach($row['month'] as $rowMonth){
if($rowMonth['month'] == $month){
echo "match: Y:".$row['year']." - m:".$rowMonth['month']." -> ". $rowMonth['value']."<br>";
}
}
}
}
}
}
答案 1 :(得分:0)
你的意思是这样吗?
$year_month = array(
array(
'year' => 1,
'month' => array(
array('month' => 2, 'value' => 600),
array('month' => 3, 'value' => 600),
array('month' => 4, 'value' => 600)
)
),
array(
'year' => 5,
'month' => array(
array('month' => 6, 'value' => 80),
array('month' => 7, 'value' => 90),
array('month' => 8, 'value' => 100)
)
)
);
foreach($year_month as $year) {
foreach($year['month'] as $month) {
$value = $month['value'];
echo $value.'<br/>';
}
}
输出:
600
600
600
80
90
100
答案 2 :(得分:0)
写完下面的内容后,值得一提的是整个练习似乎有点无意义。 当您在十年内每个月进行迭代时,迭代数据并检查年份是否匹配(因为那一年中没有一个月可以在逻辑上超出1-12的范围)会更加简单,而不是迭代120个月,以查看数据是否包含该月的值:
foreach($data as $year_data) {
if(in_array($year_data['year'], range(1,10)){
foreach($year['month'] as $month) {
echo = $month['value'];
}
}
}
不清楚你想要对数据做什么,但要实现它,你需要使用嵌套的foreach循环迭代数组:
foreach (range(1, 10) as $year) {
foreach (range(1, 12) as $month) {
//iterate the array to find the correct element
$foundValue = false;
foreach($data as $year_data){
if($year_data['year']==$year){
foreach($year_data['month'] as $month_data){
if($month_data['month']==$month){
//do something with the data
$foundValue = $month_data['value'];
}
}
}
}
echo ($foundValue) ?: $defaultValue;
}
}
如果您可以重新构建要按年和月编制索引的数据数组,例如:
$data = array(
'year_1'=>array(
'month_2'=>600,
'month_3'=>600,
'month_4'=>600
),
'year_5'=>array(
'month_6'=>80,
'month_7'=>90,
'month_8'=>100
),
);
然后您可以更轻松地访问数据:
foreach (range(1, 10) as $year) {
foreach (range(1, 12) as $month) {
//access value directly via keys:
if(isset($data['year_'.$year]['month_'.$month];)){
echo $data['year_'.$year]['month_'.$month];
}else{
echo $defaultValue;
}
}
}
即使您无法改变数据的创建方式,您仍然可以使用上述结构创建一个新数组:
$newData = array();
foreach($data as $year_data){
$year = 'year_'.$year_data['year'];
$months = array();
foreach($year_data['month'] as $month_data){
$months['month_'.$month_data['month']]=$month_data['value'];
}
$newData[$year]=$months;
}
然后,您可以在上面的简化示例中使用$newData
代替$data
。