Создание вложенных массивов из базы данных MySQL - PullRequest
0 голосов
/ 24 августа 2011

У меня есть база данных с некоторыми таблицами и столбцами.Я хочу создать многомерный массив в PHP для хранения этих значений.

$tableData = array(array()); // I try to set up the multidimensional array.

/* 1: Get Table Names (works fine) */
    $result = mysql_query("SHOW TABLES FROM myDatabase");
    $i=0;
    while ($row = mysql_fetch_row($result)) 
    {                   
        // Push the table name into the PHP array
        array_push($tableData, $row[0]);
    }


/* 2: Columns */
    for ($i = 1; $i < count($tableNames); $i++)
    {
        $result = mysql_query("SHOW COLUMNS FROM $tableData[$i]");          
        while ($row = mysql_fetch_assoc($result)) 
        {
            array_push($tableData[$i], $row); // ** ERROR THROWN: first argument must be an array ** //
        }
    }

Как я могу это сделать?Я чувствую, что это должно быть просто, но я потратил последние 4 часа, стуча головой по клавиатуре и Google, пытаясь понять это ... множество учебников по вводу многомерного массива в SQL, но не много длянаоборот!

Спасибо!

Ответы [ 5 ]

0 голосов
/ 24 августа 2011

Вам лучше обратиться к INFORMATION_SCHEMA напрямую и создать массивы на основе этого:

// table_schema is the database name. So you're looking up all of the tables
// and their respective columns.
$q = mysql_query( 'SELECT TABLE_NAME, COLUMN_NAME FROM COLUMNS WHERE '.
                  "TABLE_SCHEMA = 'myDatabase'" );

$output = array();
while( $r = mysql_fetch_assoc( $q ) )
{
    // does an index exist for this table?
    if( !isset( $output[ $r[ 'table_name' ] ] ) )
         // no? create one
         $output[ $r[ 'table_name' ] ] = array();
    // append the array which exists at this index with the column name.
    $output[ $r[ 'table_name' ] ][] = $r[ 'column_name' ];
}
0 голосов
/ 24 августа 2011

вам не нужен массив (array ()) для настройки многомерного массива.просто вставьте другой массив в качестве значения.

попробуйте это:

foreach ($tableNames as $tableName) 
{
    $result = mysql_query("SHOW COLUMNS FROM $tableName");
    while ($row = mysql_fetch_assoc($result))
    {
        $tableData[$tableName] = $row;
    }
}
0 голосов
/ 24 августа 2011

Ваш запрос имен столбцов неверен. Вы должны сделать что-то вроде SHOW COLUMNS FROM mytable FROM mydb; или SHOW COLUMNS FROM mydb.mytable;

ИСТОЧНИК: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

Вы, вероятно, хотите сделать что-то вроде:

$tableData = array();

$result = mysql_query("SHOW TABLES FROM myDatabase");
while ($row = mysql_fetch_row($result)) 
{
    $tableData[$row[0]] = array();
}

foreach ($tableData as $table => $array)
{
    $result = mysql_query("SHOW COLUMNS FROM $table FROM myDatabase");          
    while ($row = mysql_fetch_assoc($result)) 
    {
        $tableData[$table][] = $row[0];
    }
}

Хотя у меня не было возможности запустить этот код для ошибок.

0 голосов
/ 24 августа 2011
$tableData = array();

/* 1: Get Table Names (works fine) */
    $result = mysql_query("SHOW TABLES FROM myDatabase");
    $i=0;
    $tablenames = array();
    while ($row = mysql_fetch_row($result)) 
    {                   
        // Push the table name into the PHP array
        array_push($tablenames, $row[0]);
    }


/* 2: Columns */
    foreach($tablenames as $table)
    {
        $tableData[$table] = array();
        $result = mysql_query("SHOW COLUMNS FROM $table");
        while ($row = mysql_fetch_assoc($result))
        {
            array_push($tableData[$table], $row);
        }
    }

должен добиться цели.

0 голосов
/ 24 августа 2011
$tableData = array(array());
...
   array_push($tableData, $row[0]);
...

Это просто означает, что вы получите массив, который выглядит следующим образом:

array(array(), 'foo', 'bar', 'baz')

Вы не можете "настроить многомерный массив" таким образом.Это должно выглядеть примерно так:

$tableData = array();
...
   array_push($tableData, array($row[0]));
...

При этом вы получите массив вроде:

array(array('foo'), array('bar'), array('baz'))

Полагаю, вам нужно больше чего-то подобного, хотя:

array('foo' => array('col1', 'col2', ...), 'bar' => array('col1', ...))

Итак, вам нужно сделать что-то подобное для столбцов:

$result = array();
foreach ($tableNames as $tableName) {  // much more useful than for()
    $result = mysql_query("SHOW COLUMNS FROM $tableName");
    while ($row = mysql_fetch_assoc($result)) {
        $result[$tableName][] = $row;
    }
}

Удачи в экспериментировании с этим ...
var_dump твой друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...