2016-09-01 71 views
-2

我想將具有匹配id的所有行保存到數組中,但我無法使其工作。我需要添加什麼?在PHP數組中保存SQL數據

public function getProjects($db1) { 
    $id= $this->getId($db1); 

    $projects = $db1->getResult(
     sprintf(
      "SELECT * FROM projects WHERE id =1" 
     ) 
    ); 
    return $projects; 
} 

所以項目只返回我的數據庫中的第一項,而不是全部。

是的,我見過類似的問題,但這些選項不適用於我,因爲我使用PHP7或者它可能與sprintf有關。 誰可以幫忙?

+0

嗯,如果ID是你的主鍵,使用'where id = 1'顯然你只會得到一個記錄,如果一個存在與該id。 – eol

+0

這不是主鍵,它也不是唯一的。有更多的項目與ID 1. – Nathan

+0

好吧,我看到,你用什麼庫查詢數據庫? – eol

回答

1

對我來說,這是sitecomposer設計,只返回一個值(where語句成功第一行)內的功能。

3

因此,讓我得到這個直:

你想從數據庫得到結果,然後,組結果由ID,即建立一個數組,積累了與相同的所有行ID。我對嗎?

如果是這樣,你可以像下面這樣做(例如):

$projects = []; 
$projects[] = ["id" => 1, "name" => "project1"]; 
$projects[] = ["id" => 2, "name" => "project2"]; 
$projects[] = ["id" => 1, "name" => "project11"]; 
$projects[] = ["id" => 2, "name" => "project22"]; 

$projectsById = []; 
foreach($projects as $project) { 
    if(!isset($projectsById[$project['id']])) 
     $projectsById[$project['id']] = []; 
    $projectsById[$project['id']][] = $project; 
} 

var_dump($projectsById); 

快速的解釋:如果

    從數據庫
  • 的foreach記錄,
    • 記錄ID不存在於數組$ projectById上,它創建了一個新的(嵌套的)數組,其記錄ID爲新數組的鍵:$projectsById[$project['id']] = [];
    • 現在,所有具有相同id的下一個記錄將被放在上面創建陣列:$projectsById[$project['id']][] = $project;

您可以檢查結果,並與這裏的代碼打:http://ideone.com/AcoLIQ