2015-04-23 53 views
0

我是新來的PHP,但我真的很喜歡它到目前爲止! 現在我偶然發現了一個array_merge的問題。PHP的foreach循環與array_merge創建json對象

這是我的代碼,它只是抓住我的數據庫中指定的每個表,然後它使一個大的JSON文件:

$tables = array("buildings", "medical", "other", "tools", "traps", "weapons"); 

    foreach ($tables as $table) { 

     // Get tables from database 
     $sth = $db->query("SELECT * FROM $table"); 
     $result = $sth->fetchAll(); 

     // Merge arrays together 
     if ($arr === null) { 
      //echo "its 0 <br/> "; 
      $arr = array("$table" => $result); 
     } else { 
      //echo "more than 0 <br/> "; 
      $arr2 = array("$table" => $result); 
      $merge = array_merge($arr, $arr2); 
     } 

    } //End loop 

    echo $merge; 

到目前爲止,它的工作不知何故,我設法得到了第一臺「的建築「和最後一張桌子」武器「以我想要的完美方式展現出來!

但我不明白爲什麼它跳過其他的.. 我相信它與$arr2有關,我需要爲每個表指定一個唯一的數組。但我怎麼能做到這一點?這是要走還是有一個更有效的方式來實現這一目標? 謝謝!

回答

1

其失敗

$merge = array_merge($arr, $arr2); 

你r合併始終是$ arr(這是$表中的第一個條目)和$ arr2(這是正在處理的最新條目)的合併。你是不是合併與以前合併數據的數據,如

$arr = array_merge($arr, $arr2) 

此外,您還可以通過只設置$改編爲空數組開始出發擺脫的if/else邏輯。

$arr = array(); 
+0

我真的很喜歡所有的答案!他們都是正確的,他們都解決了我的問題!但我想接受這個答案,因爲它描述了什麼和失敗的原因。給我一個更大的理解,而不僅僅是代碼。 但我相信你應該添加一個像其他人一樣的解決方案,以便將來的人可以看到:) 感謝所有的幫助傢伙! – BlitZz

1

你可以把一切的獨特陣列內,如:

$myArray["$table"] = $result; 
1
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons"); 
$tableArr = array(); 
foreach ($tables as $table) { 

    // Get tables from database 
    $sth = $db->query("SELECT * FROM $table"); 
    $result = $sth->fetchAll(); 

    if(isset($result)){ 
     $tableArr[$table] = $result; 
    }else{ 
     $tableArr[$table] = ''; 
    } 


} //End loop 

print_r($tableArr); 

創建新的數組,並設置索引表的名稱和它的結果存儲陣列英寸

1

如果我理解正確的話......

相反這兩條線的

$arr2 = array("$table" => $result); 
$merge = array_merge($arr, $arr2); 

你可以試試這個:由於該行的

$tables[$table] = $result; 
1

您的代碼可以大大簡化。

$tables = array("buildings", "medical", "other", "tools", "traps", "weapons"); 
foreach ($tables as & $table) { 
    $table = $db->query("SELECT * FROM $table")->fetchAll(); 
} 
echo json_encode($tables); 

當然,你還需要檢查錯誤(數據庫和JSON錯誤),以便代碼是可靠的,但簡單的,你可以做的東西就更好了。簡單很好,特別是在編程方面。