2010-01-06 4 views
0

PHP의 for 루프가 내 배열의 마지막 항목 만 반환하는 이상한 문제가 있습니다.PHP - for 루프는 배열의 마지막 변수 만 반환합니다.

XML 파일의 SimpleXML을 사용하여 배열을 만듭니다.

<tags><tag value="Tag1" /><tag value="Tag2" /><tag value="Tag3" /></tags> 

을하지만 그 대신 난 그냥 얻을 :

코드는 다음을 반환해야

<tags><tag value="Tag3" /></tags> 

그래서 아무리 내가 거기에있어 얼마나 많은 배열의 마지막 항목을 제외하고 모두 무시합니다.

내가 뭘 잘못하고 있는지 누가 알 수 있습니까? 루프에서 사용 $tags .= 대신 $tags = :

<wddxPacket version='1.0'> 
    <header/> 
    <data> 
     <struct> 
      <var name='infocodes'> 
       <string>Tag1,Tag2,Tag3</string> 
      </var> 
     </struct> 
    </data> 
</wddxPacket> 

답변

12

간단한 버그 :

$tags = ''; 
for ($i = 0; $i <count($rawtags); $i++){ 
    $tags .= '<tag value="' . $rawtags[$i] . '" />'; 
} 
+0

이 항목에 걸린 시간은 얼마입니까? – RMcLeod

+0

와우 같은 쉬운 수정! 고마워. – Brigante

+1

또는'$ tags [] = ...'를 사용하고 루프 다음에'implode'을 사용하십시오. 좀 더 공연해야합니다. – outis

2
for ($i = 0; $i <count($rawtags); $i++){ 
    $tags = '<tag value="' . $rawtags[$i] . '" />'; 
} 

당신에게 여기

<?php 

function gettags($xml) 
{ 
    $xmltags = $xml->xpath('//var[@name="infocodes"]/string'); 
    return $xmltags[0]; 
} 

//Path to the XML files on the server 
$path = "/xmlfiles/"; 

//Create an array with all the XML files 
$files = glob("$path/*.xml"); 

foreach($files as $file) 
{ 
    $xml = simplexml_load_file($file); 
    $xmltags = gettags($xml); 

//Using the , character split the values coming from the $xmltags into an array 
$rawtags = explode(',', $xmltags); 

//Loop through the tags and add to a variable. Each tag will be inside an XML element - <tag value="tagname" /> 
for ($i = 0; $i <count($rawtags); $i++){ 
    $tags = '<tag value="' . $rawtags[$i] . '" />'; 
} 

//Replace HTML escaped characters (ä, å, ö, Å, Ä, Ö) and the | character with normal characters in the tags variable 
$tagsunwantedchars = array("&Ouml;", "&Auml;", "&Aring;", "&ouml;", "&auml;", "&aring;", "|"); 
$tagsreplacewith = array("Ö", "Ä", "Å", "ö", "ä", "å", " - "); 
$tagsclean = str_replace($tagsunwantedchars, $tagsreplacewith, $tags); 

//Create the full tag list and store in a variable 
$taglist = "<tags>$tagsclean</tags>"; 

} 

echo $taglist; 

?> 

XML 파일입니다 : 여기

코드입니다 방금 끝났어. 모든 반복마다 $tags 변수를 쓰십시오. 보십시오 : 당신이 그것에 추가하기 전에 $tags를 초기화해야

$tags = ''; 
foreach ($rawtags as $rawtag) { 
    $tags .= '<tag value="' . $rawtag . '" />'; 
} 

주 (그렇지 않으면이 PHP 경고를 생성합니다).

또한 for 루프 대신 foreach을 사용하면 코드를 더 간단하고 읽기 쉽게 만들 수 있습니다. 이와 같은 사소한 오류는 소음으로 둘러싸여 있지 않은 경우 더 쉽게 발견 할 수 있습니다.

+0

우수 - 어떻게 수정합니까? –

+0

감사합니다. 저는 PHP 초보자이며 항상 코드 작성자의 도움을 받아 주셔서 감사합니다. – Brigante

0
$tags .= '<tag value="' . $rawtags[$i] . '" />'; 

이렇게하면 문제를 해결할 수 있습니다.