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 回答