2011-09-22 7 views
0

내 태그가 올바른 순서로 내부 foreach 루프에 표시됩니다.foreach 루프에서 array_push를 사용하는 배열 내삽 방법

쉼표로 구분하고 싶지만 방법이 확실하지 않습니다.

두 번째 foreach 루프를 사용하지 않고 내 태그를 표시하는 더 좋은 방법이 있습니까?

$people = array(); 

while($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)){ 
     if(!isset($people[$row["id"]])){ 
      $people[$row["id"]]["id"] = $row["id"]; 
      $people[$row["id"]]["tag"] = $row["tag"]; 
      $people[$row["id"]]["tags"] = array(); 
     } 
    array_push($people[$row["id"]]["tags"], array("id"=>$row["tags_id"],"tag_name"=>$row["tag"])); 
} 

foreach($people as $pid=>$p){ 

    echo "(#{$p['id']}) "; 

    foreach($p["tags"] as $tid=>$t){ 
    echo "<a href='#'>{$t['tag_name']}</a> "; 
    } 

     echo "<br><br>"; 
} 
+0

왜 'implode()'를 사용하지 않는 것이 좋을까요? –

+0

@Rikudo : 다차원 배열을 파싱하는 것이 일반적으로 너무 잘되지 않습니다. –

답변

1

배열에 하나의 요소 만 추가하기 때문에 array_push를 사용할 필요가 없습니다.

$people[ $row["id"] ]["tags"][] = array(...); 

내 대답은 데이터베이스에서 저장된 변수의 필요성에 따라 달라집니다. 제공된 코드에서 중첩 된 foreach 루프의 데이터베이스에있는 ID 및 태그 값만 사용하고 있습니다. 이 경우, 새로운 태그 배열에 implode()를 사용할 수 있도록 배열을 단순화 할 수 있습니다. 나는 당신의 데이터베이스 스키마를 가지고 있지 않기 때문에 이것을 테스트하지 않았지만 그것이 효과가있을 것이라고 나는 믿는다.

<?php 
$people = array(); 
$tags = array(); 

while(($row = mysqli_fetch_array($rs, MYSQLI_ASSOC))) 
{ 
    if(!isset($people[$row['id']])) 
    { 
     $people[ $row['id'] ] = array('id' => $row['id'], 'tag' => $row['tag']); 
     $tags[ $row['id'] ] = array(); 
    } 
    $tags[ $row['id'] ][] = $row['tag']; 
} 

foreach($people as $pid => $p) 
{ 
    echo "(#{$p['id']}) "; 
    echo '<a href="#">' . implode('</a><a href="#">', $tags[ $p['id'] ]) . '</a>'; 
    echo '<br /><br />'; 
} 
+0

많은 사람 감사합니다 !! – checkenginelight

+0

그 배열에 하나 이상의 요소가있는 경우 어떻게 달라질 수 있습니까 (편집 됨). 설치가 더 좋은 경우 plz이 알려주는 새 질문을 설정하십시오. – checkenginelight

+1

foreach 루프에서 더 이상 변수를 사용하지 않으므로 아무런 변화가 없습니다. – nickb

관련 문제