SQL + PHP显示多维数组

问题描述 投票:1回答:2

Mysql Query返回这些值:

Column1     Column2
V1          V1
V1          V2
V1          V3
V1          V4
V2          V1
V2          V2
V3          V1

Fetchall()存储结果就像那样。

Array
(
    [0] => Array
        (
            [Column1] => V1         
            [Column2] => V1
        )

    [1] => Array
        (
            [Column1] => V1         
            [Column2] => V2
        )

    [2] => Array
        (
            [Column1] => V1         
            [Column2] => V3
        )

    [3] => Array
        (
            [Column1] => V1         
            [Column2] => V4
        )
    [4] => Array
        (
            [Column1] => V2
            [Column2] => V1
        )
    [5] => Array
        (
            [Column1] => V2
            [Column2] => V2
        )
    [6] => Array
        (
            [Column1] => V3
            [Column2] => V1
        )
)

我想这样展示。我尝试双重foreach ...

V1
    V1
    V2
    V3
    V4
V2
    V1
    V2
V3
    V1
php arrays multidimensional-array
2个回答
1
投票

一个简单的foreach循环应该非常愉快地做到这一点。所有你必须记住Column1的值,这样你就可以知道想要更好的单词的主键何时发生了变化。

我在CLI上对此进行了测试,因此您可能需要修改它以使用某些HTML,如果您希望它能够很好地在浏览器上显示。

$arr = [
        ['Column1'=>'V3' , 'Column2'=>'V1'],
        ['Column1'=>'V1' , 'Column2'=>'V1'],
        ['Column1'=>'V2' , 'Column2'=>'V1'],
        ['Column1'=>'V1' , 'Column2'=>'V2'],
        ['Column1'=>'V1' , 'Column2'=>'V3'],
        ['Column1'=>'V1' , 'Column2'=>'V4'],
        ['Column1'=>'V2' , 'Column2'=>'V2'],
];

$col1 = array_column($arr, 'Column1');
$col2 = array_column($arr, 'Column2');

array_multisort($col1, SORT_ASC, $col2, SORT_ASC, $arr);

$lastKey = null;
foreach($arr as $subarr) {
    if ( $lastKey != $subarr['Column1'] ) {
        echo $subarr['Column1'] . PHP_EOL;
        echo "\t" . $subarr['Column2'] . PHP_EOL;
        $lastKey = $subarr['Column1'];
    } else {
        echo "\t" . $subarr['Column2'] . PHP_EOL;
    }
}

结果

V1
        V1
        V2
        V3
        V4
V2
        V1
        V2
V3
        V1

0
投票

从我看到你想要通过Column1值分组结果。在这种情况下,您可以简单地写:

$result = [];

foreach ($array as $row) {
    // Using PHP 7.1+
    ['Column1' => $key, 'Column2' => $value] = $row;
    // Using PHP before 7.1
    $key = $row['Column1'];
    $value = $row['Column2'];

    if (! array_key_exists($key, $result)) {
        $result[$key] = [$value];
    } else {
        $result[$key][] = $value;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.