两个数组试图结合一个值等于一个键的位置?

时间:2014-12-18 18:16:01

标签: php arrays

我有两个阵列,这是一个应用程序'数组和一个表是一个'表'阵列。表格'中的每一行有一个' AppID'如下所示。如何将数组组合到表数组中的App_ID位于App Array上的相同App_ID下?我目前拥有的是第一个,我想要的是在那之后。我正在使用PHP。感谢您的帮助!

App Array:

Array
(
    [1] => Array
        (
            [App_ID] => 1
            [App_Name] => Project Manager
            [App_Created] => 2014-12-17 16:31:57
        )

    [2] => Array
        (
            [App_ID] => 2
            [App_Name] => Estimating
            [App_Created] => 2014-12-17 23:49:40
        )
)

Tables Array:

Array
(
    [1] => Array
        (
            [Table_ID] => 1
            [App_ID] => 1
            [Table_Name] => Customers
        )

    [2] => Array
        (
            [Table_ID] => 2
            [App_ID] => 1
            [Table_Name] => Jobs
        )

)

我想去:

Array
(
    [1] => Array
        (
            [App_ID] => 1
            [App_Name] => Kennedy_Fabricating_Project_Manager
            [App_Created] => 2014-12-17 16:31:57
            [Tables] = > Array
                    (
                        [Table_ID] => 1
                        [App_ID] => 1
                        [Table_Name] => Customers
                    ),
                Array
                    (
                        [Table_ID] => 2
                        [App_ID] => 1
                        [Table_Name] => Jobs
                    )
        )

    [2] => Array
        (
            [App_ID] => 2
            [App_Name] => Estimating
            [App_Created] => 2014-12-17 23:49:40
        )

我当前的PHP代码:

//Get App List
$apps_sql = $conn->query("SELECT * FROM `Apps`") or die("Conn Query Apps Failed");
$apps = array();
while($apps = $apps_sql->fetch_array(MYSQLI_ASSOC)) {
        $app_id = $apps['App_ID'];
        $table_sql = $conn->query("SELECT * FROM `Tables` WHERE `App_ID` = $app_id") or die("Conn Query Tables in Apps Failed");
         // My Guess is Something Here? 
        $apps_a[$app_id] = $apps;
}

// Table List
$table_sql = $conn->query("SELECT * FROM `Tables`") or die("Conn Query Tables Failed");
$tables = array();
while($tables = $table_sql->fetch_array(MYSQLI_ASSOC)) {
        $table_id = $tables['Table_ID'];
        $tables_a[$table_id] = $tables;
}

2 个答案:

答案 0 :(得分:0)

只是改变:

$table_id = $tables['Table_ID'];
$tables_a[$table_id] = $tables;

成:

$apps_a[$tables['App_ID']]['Tables'][$tables['Table_ID']] = $tables;

答案 1 :(得分:0)

它看起来更干净,速度更快,因为您只进行了2次查询而不是数以万计

$apps_sql = $conn->query("SELECT * FROM `Apps`");
$apps_ids = array();
while ($app = $apps_sql->fetch_array(MYSQLI_ASSOC))
{
    $apps_ids[] = $app['App_ID'];
    $apps[$app['App_ID']] = $app;
}

$apps_ids = implode(',', $apps_ids);

$table_sql = $conn->query("SELECT * FROM `Tables` WHERE IN ({$apps_ids})");

while($table = $table_sql->fetch_array(MYSQLI_ASSOC))
{
    $apps[$table['App_ID']]['tables'][] = $table;
}