• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

形式从关联数组

php 来源:Scott Mensah 3次浏览

新的阵列我有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]; 


===========解决方案如下:

试试这个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)