0

私は数日間これを理解しようとしています。値の配列をマスター配列にする必要があり、それはすべて SQL ステートメントから取得する必要があります

public function fetchAllRest()
{

    $db = $this->getAdapter();
    $sql = $db->select()->from(array('c' => $this->getTableName()), array('id', 'personalId', 'name', 'number', 'email'))
    ->join(array('pd' => $this->getTableName('personal_data')), 'pd.personalId = c.personalId', array('street', 'zipcode', 'place'));

    $results = $this->getAdapter()->fetchAll($sql);
    return $results;
}

以下のコードは、個人データとの結合を含むすべてのレコードの配列を生成します (したがって、5 つのレコードがある場合、5 つのレコードの配列を取得します)。

ここで、join ステートメント (personal_data 部分) を別の配列として配列の一部にしたいので、次のようになります。

[ 
    {1}, 
    {2}, 
    {3}, 
    {4}, 
    {5}
]

(5+3) 個の値の配列を含む各値 (この場合はキーと値のペアを持つ JSON) であり、これは次のようになります。

[ 
    {1 
        {"personal_data" : "name", "number", "email"}
    }, 
    {2 
        {"personal_data" : "name", "number", "email"}
    }, 
    {3 
        {"personal_data" : "name", "number", "email"}
    }, 
    {4 
        {"personal_data" : "name", "number", "email"}
    }, 
    {5 
        {"personal_data" : "name", "number", "email"}
    }
]

そのため、そのレコードのすべての personal_data を含む値「personal_data」を持つ元の配列のカスタム名前付き値。

各 SQL をループしてみましたが、ステートメントが多すぎて mysql-bytes-error が発生しました

解決策はありますか?

前もって感謝します

編集:私は次のことを試しました:

foreach($results as $r) {
        $results[$i]["personal_data"] = array('personalDataId' => $results[$i]['personalDataId'],
                'name' => $results[$i]['name'],
                'number' => $results[$i]['number'],
                'email' => $results[$i]['email'];
        $i++;
    }
    return $results;

残念ながら、これは私が望むようには機能しませんでした。配列内の値にアクセスするには、それらが既に存在している必要があります(結果として、既にハッシュにあるデータを含むサブ配列が生成されます)。現在、これらの余分なデータを削除することを検討していますが、最初に追加したデータを削除するのは非常に不便に思えます

4

1 に答える 1

1

あなたが得た後にこれを試してください$results

$jsonArray = array();
foreach ( $results as $result ) {
    $jsonArray[] = array( 'personal_data' => array(
        'id' => $result->id,
        'name' => $result->name,
        'street' => $result->street,
        ...
    ));
}

return $jsonArray;
于 2013-03-01T10:23:38.067 に答える