2011-11-18 7 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 년 내 (매월 아님) 내야한다고 생각합니다. –

+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

이 시도 (2 패스를 편집, 키워드 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 : 감사합니다. 키워드'array'를 잊어 버렸습니다. 테스트하지 않고 얻은 것입니다. –

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

?> 
012 3,516,

최종 출력은 다음과 같아야합니다

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

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

)