2017-07-22 14 views
-3
Word-Array 
    Words1-array 
    Words1 meaning 
     -Words1 Synonyms- 
      -Synonym1,Synonym2.etc(Array) 
     -Words1 Antonyms 
      -Antonym1,Antonym2.etc(Array) 
    Words2-array 
    Words2 meaning 
     -Words2 Synonyms- 
      -Synonym1,Synonym2.etc(Array) 
     -Words2 Antonyms 
      -Antonym1,Antonym2.etc(Array) 

$ar1 = array(array("Words"=>array("word","meaning","synonyms"=>array(),"antonyms"=array())))); 

私は生成JSON結果のための配列のPHPの配列を作成しようとしているが、常にこのような本PHPの配列

答えて

1

何かを達成するために失敗しましたか?これは、あなたが探しているものであれば

$words = array(
    'word1' => array(
     'meaning' => 'word1 meaning', 
     'synonyms' => array(
      'word1 synonym1', 
      'word1 synonym2' 
     ), 
     'antonyms' => array(
      'word1 antonym1', 
      'word1 antonym2' 
     ) 
    ), 
    'word2' => array(
     'meaning' => 'word2 meaning', 
     'synonyms' => array(
      'word2 synonym1', 
      'word2 synonym2' 
     ), 
     'antonyms' => array(
      'word2 antonym1', 
      'word2 antonym2' 
     ) 
    ) 
); 

は、あなたが利用可能なあらゆるデータソースから動的な配列を作成するために非常に簡単です。これは、もちろん非常に単純である

    +----------+ 
+---------+  | synonyms | 
| words |  +----------+ 
+---------+  | id  | 
| id  | -+-> | word_id | 
| word | | | synonym | 
| meaning | | +----------+ 
+---------+ | 
      | +----------+ 
      | | antonyms | 
      | +----------+ 
      | | id  | 
      \-> | word_id | 
       | antonym | 
       +----------+ 

は、あなたがsynonymsに重複がたくさんあるとされます:あなたは、あなたの質問にその情報を提供していないので、あなたがこのような構造だMySQLデータベースを持っていると仮定しましょうこの構成のテーブルantonyms

標準PDOまたはmysqli機能を使用して、データベースから情報を取得できます。あなたのデータソースが実際にMySQLデータベースであるかどうかは明らかではないので、私はmysqliと仮定し、この例では非常に基本的なクエリを使用します。結局のところ、ここでの目的はデータベースと安全に通信する方法を教えることではなく、json_encode()を通過できる多次元配列を構築する方法です。

$words = array(); 

$mysqli = new mysqli(...); 

// retrieve the list of words from the `words` table 
$words_res = $mysqli->query('SELECT * FROM `words`'); 
while ($word = $words_res->fetch_assoc()) { 
    // build the initial sub-array for this word, we'll be adding 
    // it to $words after we fill it 
    $word_array = array(
     'meaning' => $word['meaning'], 
     'synonyms' => array(), 
     'antonyms' => array() 
    ); 

    // retrieve all synonyms for this word 
    $synonyms_res = $mysqli->query('SELECT * FROM `synonyms` WHERE `word_id` = ' . $word['id']); 
    while ($synonym = $synonyms_res->fetch_assoc()) { 
     // add this synonym to our $word_array 
     $word_array['synonyms'][] = $synonym['synonym']; 
    } 

    // retrieve all antonyms for this word 
    $antonyms_res = $mysqli->query('SELECT * FROM `antonyms` WHERE `word_id` = ' . $word['id']); 
    while ($antonym = $antonyms_res->fetch_assoc()) { 
     // add this antonym to our $word_array 
     $word_array['antonyms'][] = $antonym['antonym']; 
    } 

    // now that $word_array is filled, we can add it to $words 
    $words[$word['word']] = $word_array; 
} 

// since you say you want a JSON result, convert the array to 
// JSON and output it 
echo json_encode($words); 
+0

回答ありがとうございますが、これらのフィールドを追加または更新する方法はありますか? –

+0

@MithunSudheendran私は、 – rickdenhaan

+0

WOWの例を追加しました。あなたは、OPが求めていた以上の優れた答えを書くために少なくともupvoteを取得する必要があります。いくつかの改善点があります(例 - プリペアドステートメントの使用)が、OPが学ばなければならないものです。よくやった! –