2013-10-09 4 views
0

나는 이것을 묻기 전에 나 자신을 찾아 내려고 노력했지만 실제로는 이해할 수 없다.2 차원 배열

내가 가지고있는 것은 내가 읽고 실제로 배열 ..로 두 차원 배열을 넣어 원하는 데이터가 simplexml_load_file

이제이 XML 파일을 사용하여 XML 데이터를 읽는 루프는 실제로 루프 것입니다 ..

그래서 XML 파일에는 Tag라는 자식이 있고 Amount라는 자식이 있습니다. 금액은 항상 다르지만 일반적으로 태그는 동일하지만 때때로 변경 될 수도 있습니다.

내가 지금 할 시도하고 있습니다 :

예 : 이제

<?xml version="1.0"?> 
<Data> 
<Items> 
    <Item Amount="9,21" Tag="tag1"/> 
    <Item Amount="4,21" Tag="tag1"/> 
    <Item Amount="6,21" Tag="tag2"/> 
    <Item Amount="1,21" Tag="tag1"/> 
    <Item Amount="6,21" Tag="tag2"/> 

</Data> 
</Items> 

내가이 읽는 루프, 그것이 태그 무엇을 볼 수있다 :이 XML 예제입니다

금액을 합산합니다. 2 개의 루프와 2 개의 다른 배열로 작동하며, 단일 루프로 모두 하나의 배열에 넣고 싶습니다.

나는이 같은 시도 :

$tags = array(); 
     for($k = 0; $k < sizeof($tags); $k++) 
     { 
       if (strcmp($tags[$k], $child['Tag']) == 0) 
      { 
       $foundTAG = true; 
       break; 
      } 
      else 
       $foundTAG = false; 
     } 


     if (!$foundTAG) 
     { 
      $tags[] = $child['Tag']; 
     } 

을 다음 어딘가에 코드에서 나는 (함께 금액을 계산 것입니다 $ 카운터) 배열에 추가 할 다른 변화를 시도 :

$tags[$child['Tag']][$k] = $counter; 
$tags[$child['Tag']][] = $counter; 
$tags[][] = $counter; 

나는 그것이 작동하지 않았기 때문에 내가 이미 삭제 한 몇 가지 다른 조합을 시도했다 ..

Ok 이것은 정말로 멍청한 질문 일지 모르지만 나는 어제 PHP로 시작했고 아무런 ide도 가지고 있지 않다. 노하우 다차원 배열이 작동 :)

당신

+0

그래서 최종 결과는 태그와 해당 총계가있는 배열이어야합니까? –

+0

$ tags = array(); 0x 비어있는 태그로 정렬합니다. – Svetoslav

+1

XML 형식이 잘못되었습니다. '데이터'보다 먼저 'items'를 닫아야합니다. –

답변

1

감사합니다 이것은 당신이 간단한 XML에서 반환 된 객체를 반복하는 방법이다 :

$xml=simplexml_load_file("/home/chris/tmp/data.xml"); 
foreach($xml->Items->Item as $obj){ 
    foreach($obj->Attributes() as $key=>$val){ 
     // php will automatically cast each of these to a string for the echo 
     echo "$key = $val\n"; 
    } 
} 

그래서, 각 태그에 대한 합계 배열을 구축 :

$xml=simplexml_load_file("/home/chris/tmp/data.xml"); 
$tagarray=array(); 
// iterate over the xml object 
foreach($xml->Items->Item as $obj){ 
    // reset the attr vars. 
    $tag=""; 
    $amount=0; 
    // iterate over the attributes setting 
    // the correct vars as you go 
    foreach($obj->Attributes() as $key=>$val){ 
     if($key=="Tag"){ 
      // if you don't cast this to a 
      // string php (helpfully) gives you 
      // a psuedo simplexml_element object 
      $tag=(string)$val[0]; 
     } 
     if($key=="Amount"){ 
      // same as for the string above 
      // but cast to a float 
      $amount=(float)$val[0]; 
     } 
     // when we have both the tag and the amount 
     // we can store them in the array 
     if(strlen($tag) && $amount>0){ 
      $tagarray[$tag]+=$amount; 
     } 
    } 
} 
print_r($tagarray); 
print "\n"; 

스키마가 변경되거나 파란색 양말 (XML은 색감이 매우 강함)을 착용해야하는 경우 심각하게 깨질 수 있습니다. 당신이 볼 수 있듯이 xml이라는 어린 아이를 다루는 것은 지루합니다.위원회의 다른 디자인 결정은 다음과 같습니다 :

+0

도움을 주셔서 감사합니다. 내 코드는 거의 같았지만 어레이에서 문자열 (문자열)을 사용하지 않았기 때문에 작동하지 않았다. :) 만약 당신이/var 배열 문자를 전달하는 PHP는 문자열을 알 줄 알았는데 :) – user1089366