2017-05-07 10 views
1

私のPHPでは、私が持っているデータベースから結果セット(0かそれ以上)を返す簡単なクエリを実行しています。ガラス張りrersult上の現在データベースの結果セットをPHPで有効なjsonにする

は次のようになります。

name: Smoothie description: Banana Smothie name: Phad Thai description: Noodles with shrimps name: Noodles description: Noodles with noodles. 

文字列はまた、上記の例のよう、別名name: Smoothie description: Banana Smothie以上のエントリで、このようになります。

以下のコードは私にこれを与える:それはただ一つのJSONオブジェクトにすることができますので、私がしたいのですがどのような

[{"name":"Smoothie","description":"Banana Smothie"}][{"name":"Phad Thai","description":"Noodles with shrimps"}] 

は、次のとおりです。

[{"name":"Smoothie","description":"Banana Smothie"},{"name":"Phad Thai","description":"Noodles with shrimps"}] 

これは私のPHPです:

<?php 
include_once 'db/dbconnect.php'; 
$input = json_decode(stripcslashes($_POST['data'])); 

for ($i=0; $i < count($input); $i++) { 
    $stmt=$con->prepare("SELECT recipes.recipeName, recipes.recipeDescription FROM ingredients, recipes, recipesingredients WHERE recipes.recipeId = recipesingredients.recipeIdFK AND recipesingredients.ingredientIdFK = ingredients.IngredientId AND ingredients.ingredientName = ?"); 
    $stmt->bind_param("s", $input[$i]); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($db_recipe_name, $db_recipe_description); 

    $rslt = array(); 
    $arr = 0; 
    while ($stmt->fetch()) { 
     $rslt[$arr] = array('name' => $db_recipe_name, 'description' => $db_recipe_description); 
     $arr++; 
    } 
    $jsonRslt = json_encode($rslt); 
    echo $jsonRslt; 
} 
?> 

誰かがこれを1つのjsonオブジェクトにする手助けができますか?

答えて

1

json_encodeとループ内にエコーする新しい配列を作成する代わりに、ループの前に1つずつ作成し、各オブジェクトを追加します。

例:

<?php 
include_once 'db/dbconnect.php'; 
$input = json_decode(stripcslashes($_POST['data'])); 

// Create an array before the loop 
$json = []; 

for ($i=0; $i < count($input); $i++) { 
    $stmt=$con->prepare("SELECT recipes.recipeName, recipes.recipeDescription FROM ingredients, recipes, recipesingredients WHERE recipes.recipeId = recipesingredients.recipeIdFK AND recipesingredients.ingredientIdFK = ingredients.IngredientId AND ingredients.ingredientName = ?"); 
    $stmt->bind_param("s", $input[$i]); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($db_recipe_name, $db_recipe_description); 

    while ($stmt->fetch()) { 
     // Add each element to the main array 
     $json[] = array('name' => $db_recipe_name, 'description' => $db_recipe_description); 
    } 
} 

// json_encode and echo the main array 
echo json_encode($json); 
?> 
+0

ありがとうございました!出来た ! :) –

0

forループ内にPHP配列を作成します。ループ内でjsonエンコード/エコーしないでください。最終的に得られたphp配列を外側のループの外側にエコーするだけです。また、応答ヘッダーをjsonに設定します。 - 誤字をおかけして申し訳ありません。モバイルからの回答。

1

forループ内で、$rslt配列は、あなたの代わりに、単一の1の複数のJSONオブジェクトを取得している理由である各iためのたびに再初期化されます。

$rsltforループの外側に初期化し、forループの後にJSONにエンコードする必要があります。

<?php 
include_once 'db/dbconnect.php'; 
$input = json_decode(stripcslashes($_POST['data'])); 

// Initialize array here 
$rslt = array(); 
$arr = 0; 

for ($i=0; $i < count($input); $i++) { 
    $stmt=$con->prepare("SELECT recipes.recipeName, recipes.recipeDescription FROM ingredients, recipes, recipesingredients WHERE recipes.recipeId = recipesingredients.recipeIdFK AND recipesingredients.ingredientIdFK = ingredients.IngredientId AND ingredients.ingredientName = ?"); 
    $stmt->bind_param("s", $input[$i]); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($db_recipe_name, $db_recipe_description); 

    while ($stmt->fetch()) { 
     $rslt[$arr] = array('name' => $db_recipe_name, 'description' => $db_recipe_description); 
     $arr++; 
    } 
} 

// encode into JSON 
$jsonRslt = json_encode($rslt); 
echo $jsonRslt; 
?> 
関連する問題