2017-07-06 69 views
0

新的阵列我有3个数组,看起来像这样形式从关联数组

Array1 
(
[0] => Array 
    (
     [Month] => 'Jan 2015' 
     [Total] => 10 
    ) 

[1] => Array 
    (
     [Month] => 'Feb 2015' 
     [Total] => 8 
    ) 

[2] => Array 
    (
     [Month] => 'Mar 2015' 
     [Total] => 10 
    ) 
) 

Array2 
(
[0] => Array 
    (
     [Month] => 'Jan 2016' 
     [Total] => 7 
    ) 

[1] => Array 
    (
     [Month] => 'Feb 2016' 
     [Total] => 5 
    ) 

[2] => Array 
    (
     [Month] => 'Mar 2016' 
     [Total] => 15 
    ) 
) 

Array3 
(
[0] => Array 
    (
     [Month] => 'Jan 2017' 
     [Total] => 13 
    ) 

[1] => Array 
    (
     [Month] => 'Feb 2017' 
     [Total] => 10 
    ) 

[2] => Array 
    (
     [Month] => 'Mar 2017' 
     [Total] => 11 
    ) 
) 

所有3个数组大小相同的。

我想要实现的是以相同顺序依次输出相同的月份和相应的值。这些新型阵列应该是这样的:

期望的结果:

$months = array['Jan 2015','Jan 2016','Jan 2017', 'Feb 2015', 'Feb 2016'...'Mar 2016','Mar 2017']; 
$totals = array[10,7,13,5,5,...,15,11]; 
+1

什么问题? – AbraCadaver

+0

我需要提示如何处理它,然后我会编写代码。 –

回答

0

试试这个https://eval.in/829000

<?php 
$array1 = Array 
(
    0 => Array ('Month' => 'Jan 2015', 'Total' => 10), 
    1 => Array ('Month' => 'Feb 2015', 'Total' => 8), 
    2 => Array ('Month' => 'Mar 2015', 'Total' => 10) 
); 

$array2 = Array 
(
    0 => Array('Month' => 'Jan 2016', 'Total' => 7), 
    1 => Array('Month' => 'Feb 2016', 'Total' => 5), 
    2 => Array('Month' => 'Mar 2016', 'Total' => 15) 
); 

$array3 = Array 
(
    0 => Array('Month' => 'Jan 2017', 'Total' => 13), 
    1 => Array('Month' => 'Feb 2017', 'Total' => 10), 
    2 => Array('Month' => 'Mar 2017', 'Total' => 11) 
); 

//ordered months names in lower case 
$monthsNames = ['jan','feb','mar','abr','may','jun','jul','aug','sept','oct','nov','dec']; 
$months = []; 
$totals = []; 
$orderedMonths = []; 
$orderedTotals = []; 
$orderedIndexes = []; 

foreach($array1 as $array){ 
    $months[] = $array['Month']; 
    $totals[] = $array['Total']; 
} 
foreach($array2 as $array){ 
    $months[] = $array['Month']; 
    $totals[] = $array['Total']; 
} 
foreach($array3 as $array){ 
    $months[] = $array['Month']; 
    $totals[] = $array['Total']; 
} 
//now the $months and $totals has all the values but not ordered, we need to order them 
//get the indexes order; 
foreach ($monthsNames as $monthName){ 
    $index = 0; //reset the index for the next month 
    foreach ($months as $inputMonth){ 
     //if the $inputMonth == $monthName then collected it's index 
     if (strpos(strtolower($inputMonth), $monthName) !== false){ 
      $orderedIndexes[] = $index; 
     } 
     $index ++; 
    } 
} 
//build the final ordered array 
foreach ($orderedIndexes as $index){ 
    $orderedMonths[] = $months[$index]; 
    $orderedTotals[] = $totals[$index]; 
} 
var_dump($orderedMonths); 
var_dump($orderedTotals); 
exit; 
?> 

这个输出

array(9) { 
    [0]=> 
    string(8) "Jan 2015" 
    [1]=> 
    string(8) "Jan 2016" 
    [2]=> 
    string(8) "Jan 2017" 
    [3]=> 
    string(8) "Feb 2015" 
    [4]=> 
    string(8) "Feb 2016" 
    [5]=> 
    string(8) "Feb 2017" 
    [6]=> 
    string(8) "Mar 2015" 
    [7]=> 
    string(8) "Mar 2016" 
    [8]=> 
    string(8) "Mar 2017" 
} 
array(9) { 
    [0]=> 
    int(10) 
    [1]=> 
    int(7) 
    [2]=> 
    int(13) 
    [3]=> 
    int(8) 
    [4]=> 
    int(5) 
    [5]=> 
    int(10) 
    [6]=> 
    int(10) 
    [7]=> 
    int(15) 
    [8]=> 
    int(11) 
} 

注意,在你想要的结果的总数是不是你想要的正确顺序,因为2015年2月8不是5

也注意到,如果你相信几个月字符串格式,您还可以使用PHP日期和时间函数。

+0

使用此代码实现了所需的结果。但是,如果你可以运行我周围发生的事情'foreach($ monthsNames as $ monthName){ $ index = 0; (strpos(strtolower($ inputMonth),$ monthName)!== false){ $ orderIndexes [] = $ index; } $ index ++; } –

+0

@ScottMensah因为我们已经知道我们的'$ monthsNames'是有序的,所以我们可以循环它的值并收集'jans'的索引,然后'febs'的索引,然后'行进的索引',.. ,, ...,..到十二月份的索引...之后,'$ orderedIndexes'包含月份排序的'$ months和$ totals'数组中的值的索引..我会也更新答案以添加评论到这一点 –

0

您可以使用foreach循环:

$months = array(); 
$totals = array(); 

foreach($array as $var){ 
    $months[] = $var['Month']; 
    $totals[] = $var['Total']; 
} 
+0

我得到的输出看起来不错。 'Array([0] => Jan 2015 [1] => Feb 2015 [2] => Mar 2015)'。问题是'$ months []'的第二个元素是'2016年1月'的第二个元素。 –