2011-11-18 80 views
3

我不熟悉PHP关联数组,因此我希望有人可以阐明这个问题,并建议如何解决我的特殊问题。PHP阵列关联数组添加键/值,检查键存在,为值数组添加值

我有一个数据数组,其中每个元素是一个字符串“Month, Year”。 我想解析这些数据并创建一个关联数组,其中的键是年,并且值是该年的几个月的数组。

例如,我有array("November, 2011", "May, 2011", "July, 2010") 使用foreach循环,我想通过这个数据来解析和创建数组:

array("2011" => array("Novemeber", "May"), "2010" => array("July")) 

从我所看到的,我需要知道如何检查如果没有创建一个键并创建一个新的数组作为其值,如果是,则将该月附加到已存在的值数组中。

如果有道理,任何帮助将不胜感激!谢谢!

+0

“联想”的数组,只是被挑剔的。 –

回答

5
$arr = array("November, 2011", "May, 2011", "July, 2010"); 

// An array to hold the output 
$outarr = array(); 

foreach ($arr as $pair) { 
    // Split the month/year from each pair 
    list($mon, $year) = explode(",", $pair); 
    // Trim whitespace on the $year 
    $year = trim($year); 

    // If the year key isn't set, create it now 
    if (!isset($outarr[$year])) $outarr[$year] = array(); 

    // And append the month. Don't forget to trim whitespace! 
    $outarr[$year][] = trim($mon); 
} 

输出:

print_r($outarr); 
Array 
(
    [ 2011] => Array 
     (
      [0] => November 
      [1] => May 
     ) 

    [ 2010] => Array 
     (
      [0] => July 
     ) 
) 
+0

我认为至少应该在一年左右(而不是一个月)修剪空白。 –

+1

@FrostyZ哦,是的,你是对的。以上添加。 –

2
<?php 

$initialArray = array("November, 2011", "May, 2011", "July, 2010"); 

$finalArray = array(); 

foreach($initialArray as $value) 
{ 
    // Note: I suppose here that each initialArray element is "<Month>, <Year>", 
    // otherwise the following line may trigger errors. 
    list($month, $year) = array_map('trim', explode(",", $value)); 

    if (!isset($finalArray[$year])) 
    $finalArray[$year] = array(); 

    $finalArray[$year][] = $month; 
} 

// orders years, however months arrays below years won't be ordered. 
ksort($finalArray); 
1

试试这个(编辑第二遍,忘记关键字array,添加装饰):

$array = array("November, 2011", "May, 2011", "July, 2010"); 

foreach ($array as $element) { 

    list($month, $year) = explode(',', $element); 

    $years[trim($year)][] = trim($month); 
} 
+0

第一行语法错误+ trim()'应该应用于年份键 –

+1

@FrostyZ:哈哈谢谢。忘了关键字'数组',这是我没有测试就可以做到的。 –

1

好吧,让我们试试这个:

<?php 

$my_array = array('November, 2011', 'May, 2011', 'July, 2010'); 
$final = array(); 

foreach($my_array as $item) { 

    // Let's split the Month and Year 
    $item = explode(', ', $item); 
    $final[$item[1]][] = $item[0]; 
} 

print_r($final); 

?> 

最终的输出应该是:

Array 
(
    [2011] => Array 
     (
      [0] => November 
      [1] => May 
     ) 

    [2010] => Array 
     (
      [0] => July 
     ) 

)