Как объединить массивы, создав массив с подмассивами?

У меня есть следующие массивы:

Минимальные значения:

[2006] => 117
[2007] => 117
[2008] => 117
[2009] => 117
[2010] => 117
[2011] => 117
[2012] => 118
[2013] => 132

Средний:

[2006] => 170
[2007] => 174
...
[2013] => 166

Максимальные значения:

[2006] => 291
[2007] => 630
...
[2013] => 246

Как их объединить, чтобы у меня был следующий массив с подмассивом:

[2006] => array (117, 170, 291),
[2007] => array (117, 174, 630),
...
[2013] => array (132, 166, 246)

Решение без подмассивов также было бы полезно. Нечто подобное решило бы и проблему:

[2006] => [117, 170, 291]
[2007] => [117, 174, 630]
...
[2013] => [132, 166, 246]

Спасибо заранее!

1

Решение

сделал предположение об именах массивов:

$new=array();

foreach($min as $k=>$v){
$new[$k]=array($v,$average[$k],$max[$k]);
}

не очень понял, что значит «решение без подмассивов» — ты хотел строку или?

РЕДАКТИРОВАТЬ создание строки

$new='';

foreach($min as $k=>$v){
$new.='['.$v.','.$average[$k].','.$max[$k].'],';
}

$new=rtrim($new,',');//remove last comma
1

Другие решения

Это довольно просто, просто написать цикл foreach, чтобы зациклить один из массивов, здесь я использовал массив $ mins.

Затем возьмите эквивалентные данные из каждого из других массивов и добавьте их все в новый массив, используя ключ в качестве ключа для нового массива.

$mins = array(2006 => 117, 2007 => 117, 2008 => 117,
2009 => 117, 2010 => 117, 2011 => 117,
2012 => 118, 2013 => 132);

$avgs = array(2006 => 170, 2007 => 174, 2008 => 169,
2009 => 179, 2010 => 180, 2011 => 181,
2012 => 182, 2013 => 183);

$maxs = array(2006 => 217, 2007 => 233, 2008 => 322,
2009 => 215, 2010 => 216, 2011 => 217,
2012 => 231, 2013 => 232);

$newArray = array();

foreach( $mins as $year => $min ) {
$newArray[$year] = array( $min, $avgs[$year], $maxs[$year] );
}

print_r( $newArray );

Выход:

Array
(
[2006] => Array
(
[0] => 117
[1] => 170
[2] => 217
)

[2007] => Array
(
[0] => 117
[1] => 174
[2] => 233
)

[2008] => Array
(
[0] => 117
[1] => 169
[2] => 322
)

[2009] => Array
(
[0] => 117
[1] => 179
[2] => 215
)

[2010] => Array
(
[0] => 117
[1] => 180
[2] => 216
)

[2011] => Array
(
[0] => 117
[1] => 181
[2] => 217
)

[2012] => Array
(
[0] => 118
[1] => 182
[2] => 231
)

[2013] => Array
(
[0] => 132
[1] => 183
[2] => 232
)

)

И используя новый синтаксис массива это будет

$mins = [2006 => 117, 2007 => 117, 2008 => 117,
2009 => 117, 2010 => 117, 2011 => 117,
2012 => 118, 2013 => 132];

$avgs = [2006 => 170, 2007 => 174, 2008 => 169,
2009 => 179, 2010 => 180, 2011 => 181,
2012 => 182, 2013 => 183];

$maxs = [2006 => 217, 2007 => 233, 2008 => 322,
2009 => 215, 2010 => 216, 2011 => 217,
2012 => 231, 2013 => 232];

$newArray = [];

foreach( $mins as $year => $min ) {
$newArray[$year] = [ $min, $avgs[$year], $maxs[$year] ];
}

print_r( $newArray );

И если вы хотите получить результат в виде массива строк, просто измените его следующим образом

foreach( $mins as $year => $min ) {
$newArray[$year] = sprintf('[%d,%d,%d]', $min, $avgs[$year], $maxs[$year]);
}

print_r( $newArray );

Давать этот результат

Array
(
[2006] => [117,170,217]
[2007] => [117,174,233]
[2008] => [117,169,322]
[2009] => [117,179,215]
[2010] => [117,180,216]
[2011] => [117,181,217]
[2012] => [118,182,231]
[2013] => [132,183,232]
)
0

По вопросам рекламы [email protected]