在PHP中从循环创建一个关联多维数组

5

我可以使用循环从数据库结果集中创建一个像以下这样的PHP数组:

Array
(
    [T] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Timer
                )

            [1] => Array
                (
                    [id] => 2
                    [name] => Tub
                )

        )

    [P] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [name] => Paper
                )

            [1] => Array
                (
                    [id] => 4
                    [name] => Puppy
                )

        )

)

您会注意到数组键是一个字母,这个字母来自于结果集中的“name”值。循环将类似于以下内容:
while($result = $db->fetch($query) {

  $key = $result['name']{0};

  //  your answer  :-)

}
3个回答

7
我认为像这样的东西应该可以做到:
$sql = 'SELECT id, name FROM table';
$result = mysql_query( $sql);
$answer = array();
while( $row = mysql_fetch_assoc( $result))
{
    $answer[ strtoupper($row['name'][0]) ][] = $row;
}
mysql_free_result( $result);
var_dump( $answer);

或者更具体地说(如果您的查询返回的列不仅仅是idname):

while( $row = mysql_fetch_assoc( $result))
{
    $answer[ strtoupper($row['name'][0]) ][] = array(
        'id' => $row['id'],
        'name' => $row['name']
    );
}

啊,太好了,谢谢!使这一切发生的部分是额外的[] >> $array[$key][] = $result;而不是$array[$key] = $result;。如果没有它,我们循环时之前的内容会被覆盖。 - Billy

0
$indexArray = array(); // Array from Example
while($result = $db->fetch($query) {
    $key = $result['name']{0};
    if(!isset($indexArray[$key])) {
        $indexArray[$key] = array();
    }
    array_push($indexArray[$key], $result);
}

0
$results = array();
while($result = $db->fetch($query)) {
  $key = strtoupper($result['name'][0]);
  if(!isset($results[$key]))
    $results[$key] = array();
  $results[$key][] = $result;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接