PHP关联数组的数组-添加键/值,检查键是否存在,将值添加到值数组中

3
我不熟悉PHP关联数组,希望有人能够解释一下,并提供如何解决我的特定问题的建议。
我有一个数据数组,其中每个元素都是一个形如“Month, Year”的字符串。我想遍历该数据并创建一个关联数组,其中键为年份,值为该年份的月份数组。
例如,我有一个array("November, 2011", "May, 2011", "July, 2010")的数组,使用foreach循环,我想遍历该数据并创建以下数组:
array( "2011" => array("Novemeber", "May"), "2010" => array("July"))

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

如果您理解了这个意思,任何帮助都将不胜感激!谢谢!


关联数组,只是为了挑剔一点。 - Marc B
4个回答

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
        )  
)

应该至少在年份(而不是月份)周围修剪空格。 - Maxime Pacary

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,添加了trim):
$array = array("November, 2011", "May, 2011", "July, 2010");

foreach ($array as $element) {

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

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

你的第一行存在语法错误,应该对年份键值应用 trim() 函数。 - Maxime Pacary
1
@FrostyZ:哈哈,谢谢。忘记了关键字“数组”,这就是我没有测试就做的结果。 - Mike Purcell

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
        )

)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接