хранение содержимого БД в массиве PHP - PullRequest
1 голос
/ 20 января 2010

Я не уверен, как это сделать, но если это можно сделать, может кто-нибудь помочь мне в этом. В моей таблице 3 столбца:

ID Set   Result Case  
1  Set1  PASS   101  
2  Set2  FAIL   102  
3  Set2  FAIL   101  
4  Set1  FAIL   101  
5  Set1  PASS   104  

$set =  $row['Set'];

Я пытаюсь добиться того, чтобы каждый из этих Set сохранял связанные с ним Result и Case в массиве.

Ответы [ 4 ]

2 голосов
/ 20 января 2010

Прочитав комментарии, я подумал, что смогу это сделать.

Прежде всего: то, что вы просите, не сработает, если вы не собираетесь проверять дубликаты {result} ключей в $array[Set2][{result}] и писать их строчными буквами, если есть дубликаты, как в вашем комментарии, что я не знаю, почему вы сделал бы. Это может сбить с толку и показаться мне бессмысленным. Для остроумия:

$arr[Set2][FAIL] против $arr[Set2][fail]

Если вы сделаете это, как показано выше [в третьем кодовом блоке Аликс Аксель], вы сделаете:

$arr[Set2][FAIL] = 102 затем переписать это значение индекса массива с помощью $arr[Set2][FAIL] = 101, что приведет к потере данных.

Другими словами, вы используете, так сказать, комбинацию «set» и «result» в качестве «комбинированной клавиши», которую вы НЕ МОЖЕТЕ ДЕЛАТЬ, поскольку комбинации не являются уникальными (Set2 FAIL, Set2 FAIL) , Я знаю, что это раздражающий ответ, но вы должны взглянуть на то, что вы делаете и почему, поскольку у меня есть предчувствие, вы поступаете неправильно. Вы, вероятно, хотите массив как:

Array
(  
    [Set1] => Array
    (  
            [101] => 'FAIL'  
            [102] => 'PASS'  
    )

    [Set2] => Array
    (  
            [101] => 'FAIL'  
            [102] => 'FAIL'  
    )
)

или что-то еще, но даже тогда это не будет работать, поскольку у вас есть несколько пар Set / Case, как проходящих, так и неуспешных. Из-за этого единственное, что вы можете здесь сделать, это использовать "id" в качестве индекса:

Array
(  
    [1] => Array
    (  
            [Set] => 'Set1'  
            [Result] => 'PASS'  
            [Case] => '101'  
    )
    [2] => Array
    (  
            [Set] => 'Set1'  
            [Result] => 'FAIL'  
            [Case] => '101'  
    )
)

Но я даже не могу сказать вам, как это сделать, потому что вы не сказали нам, как в первую очередь структурирован ваш массив результатов запроса !! Итак, шаг 1) Пожалуйста, напечатайте_r или var_dump результатов запроса.

2 голосов
/ 20 января 2010
<code>$arr = array();

foreach ($records as $key => $value)
{
    $arr[$key]['Result'] = $value['Result'];
    $arr[$key]['Case'] = $value['Case'];
}

echo '<pre>';
print_r($arr);
echo '
';

В свете вашего комментария:

foreach ($records as $key => $value)
{
    $arr[$key][$value['Result']] = $value['Case'];
}

В свете вашего последнего комментария:

foreach ($records as $key => $value)
{
    $arr[$value['Set']][$value['Result']] = $value['Case'];
}
1 голос
/ 20 января 2010
// assuming
$myArray = array();
$result = mysql_query("SELECT * FROM table ORDER BY Set ASC");
while ($rows = mysql_fetch_assoc($result)) {
  for ($i = 0; $i <= count($rows); $i++) {
    $myArray[$rows['ID']]['Set'] = $rows['Set'];
    $myArray[$rows['ID']]['Result'] = $rows['Result'];
    $myArray[$rows['ID']]['Case'] = $rows['Case'];
}

// output
Array
(
    [1] => Array
    (
        [Set] => 'Set1'
        [Result] => 'PASS'
        [Case] => '101'
    )
    [2] => Array
    (
        [Set] => 'Set1'
        [Result] => 'FAIL'
        [Case] => '101'
    )
    [3] => Array
    (
        [Set] => 'Set1'
        [Result] => 'PASS'
        [Case] => '104'
    )
    [4] => Array
    (
        [Set] => 'Set2'
        [Result] => 'FAIL'
        [Case] => '102'
    )
    [5] => Array
    (
        [Set] => 'Set2'
        [Result] => 'FAIL'
        [Case] => '101'
    )
)
0 голосов
/ 17 июня 2013

Много лет назад была написана функция для обработки коротких запросов, которая возвращает многомерный массив (с именем, совпадающим с именем таблицы) результата запроса MySQL. Надеюсь, это сэкономит время на обработку простых и коротких запросов MySQL:

<?php
/*
FUNCTION: db2array($tablename, $condition)

Which simply makes a query: SELECT * FROM $tablename WHERE $condition
and returns multidimensional array()* named as 
DB_table_name with keys named as tables_cell_name followed by row_number:

*Returns multidimensional array: $my_table[cell_name][row_number] 

Example 1:  
db2array("my_table", "cell_name = 'A' ORDER BY id LIMIT 1")
where "my_table" is DB tablename and $condition is all the rest 
what comes after MySQL's WHERE;

Example 2:
db2array("my_table"); 

Returns: $my_table[];
To see results, go for print_r($my_table[]);

*/

function db2array($tablename, $condition){

    global $$tablename;

    //if $condition is NULL set it to 1=1
    $condition = ($condition)?$condition:"1=1";

    $query = mysql_query("
    SELECT * FROM $tablename WHERE $condition
    ") or die(mysql_error()); 

    // COUNTING FIELDS AND ROWS
    $f_to = mysql_num_fields($query);
    $n_to = mysql_num_rows($query);

    // EXIT IF NO RESULTS
    if (!mysql_num_rows($query)) return false;


    // PUSHING ALL CELL NAMES TO $cellname ARRAY
    for ($f=0; $f<=$f_to-1; $f++){
        $cellname[$f] = mysql_field_name($query, $f);
    }

    //  GENERATING OUTPUT ARRAY
    for ($n=0; $n<=$n_to-1; $n++){
        foreach ($cellname as $val){
            $result[$val][$n] = mysql_result($query, $n, $val);
        }
    }

    $$tablename = $result;
    return $$tablename;

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