将数组组合成多维数组,其中键值相同

时间:2014-11-01 17:52:14

标签: php arrays multidimensional-array associative-array

我一直在搜索和搜索这个网站和网页好几个小时,但我似乎没有找到正确的答案。
我想要完成的是从数据库中获取一个表,将来自给定列的相同值的行组合成一个多维数组。

我的表看起来像这样:
http://i.imgur.com/DkNaw61.png

我想要的是创建一个多维数组,其中setting_group_id是相同的 所以我可以使用这些构建数组来显示我的管理面板上的设置部分。 像这样:
http://i.imgur.com/VxMsWHk.png

我到目前为止的代码是:

$query  = "SELECT * FROM bmp_settings";
$mysqli = new mysqli($hostname, $username, $password, $database);

// Check connection
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

if ($result = mysqli_query($mysqli,$query)) {

        while($bmp_setting_groups = mysqli_fetch_assoc($result)) {
            echo "<pre>";
            print_r ($bmp_setting_groups);
            echo "</pre>";
        }
}

/* free the results */
mysqli_free_result($result);

/* close connection */
$mysqli->close();

我得到的是12个关联数组。

谁可以帮助我?

1 个答案:

答案 0 :(得分:0)

查看完整代码:http://hastebin.com/rakeceqefi.xml


那么,你想要这样的东西吗?

array(1) {
  'TeamSpeak' =>
  array(2) {
    'teamspeak_filetransfer_port' =>
    array(6) {
      'setting_label' =>
      string(17) "Filetransfer Port"
      'setting_helpblock' =>
      NULL
      'setting_type' =>
      string(4) "text"
      'setting_value' =>
      int(30033)
      'setting_options' =>
      NULL
      'setting_weight' =>
      int(4)
    }
    'teamspeak_port' =>
    array(0) {
    }
  }
}

然后你可以这样做:

$conn = new PDO('mysql:host=localhost;dbname=test_a', 'test', 'test'); //replace this with your credentials

$q1 = $conn->prepare('SELECT DISTINCT `setting_group_id` FROM `bmp_settings`');
$q1->execute();
$groups = array_fill_keys($q1->fetchAll(PDO::FETCH_COLUMN, 0), array());

$q2 = $conn->prepare("SELECT * FROM `bmp_settings`");
$q2->execute();
$result = $q2->fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $r) {
    $gName = $r['setting_group_id'];
    $sKey = $r['setting_key'];
    $groups[$gName][$sKey] = $r;
    unset($groups[$gName][$sKey]['setting_group_id']); // not really needed
    unset($groups[$gName][$sKey]['setting_key']); // not really needed
}

这可以获得上面的数组。