从2个数组php mysql中的表中获取2列

时间:2014-10-16 03:24:40

标签: php arrays select mysqli fetch

我有一个包含6列的表

排序如下:

数据库 - >孩子

|CANDY   | COLOR  |  DRINK  | PET  | SONG  | TOY   |
---------------------------------------------------
|cookie  | blue   | juice   | dog  | if    | ball  |
|cake    | red    | coke    | cat  | ask   | doll  |

我想存储

  • 一个名为Array
  • Candy[];中的所有糖果
  • color[];
  • 上的所有颜色
  • drink[];等所有饮料......

我设法使用带有这些行的FORLOOP的列名创建数组,这样可以正常工作:

  

$ fieldName = mysqli_fetch_field_direct($ result,$ i) - > name;   $ {$ fieldName} = array();

但是当代码到达WHILE部分时,也就是在循环内部,要在arrays []中添加列项,它只添加第一个元素并返回到FORLOOP,并将一个元素添加到next array []并跳转到下一个数组[] ....

while($row = mysqli_fetch_array($result)){
  //inserts itens in the "$array" with columns name
  ${$fieldName}[] = $row[$i];
}

如果我尝试"echo" arrays[]并且未在"BREAK"的末尾添加WHILE,则会返回错误

  

“Undefined offset:0 in line ...”

当我输入“BREAK”时,它适用于:

 echo candy[0];   = cookie

但不适用于:

echo candy[1];   = Undefined offset: 1 in line...

以下是整个代码:

$sql="SELECT candy, color, drink, pet, song, toy FROM kids";
$result = mysqli_query($con,$sql);

$colNumber = mysqli_num_fields($result);

    for($i=0;$i<=$colNumber -1;$i++){

        $fieldName = mysqli_fetch_field_direct($result, $i)->name;
        echo . $fieldName . "<br /><br />";

        //Creates an Array with Coll Name from DB 
        //with dynamic-variable ${$fieldname}
        ${$fieldName} = array(); 

        while($row = mysqli_fetch_array($result, MYSQLI_NUM)){

            //inserts the received itens into the array ${$fieldName} 
            ${$fieldName}[] = $row[$i];

             printf ("%s (%s)\n", $row[$i], $row[1]); 
             }

       echo ${$fieldName}[0];
       echo candy[0];

       echo ${$fieldName}[1];
       echo candy[1];
       echo "<hr />";
}

当WHILE代码不在FORLOOP内并且如果我像query()那样生成时,WHILE代码可以正常工作:

SELECT candy FROM kids.

然而,就像那样,我需要600行重复代码才能得到我想要的东西,并为DB表上的每个新coll重复/粘贴。

有什么想法吗?

我需要它将数组放在HTML中 <SELECT><OPTION></SELECT>,然后使用mt_rand()进行随机播放并获得不同的“profiles”。这不会用于孩子的东西,这只是一个例子。 它将是一个虚拟的犯罪创造者,它将改变变量,为法学院学生的工作创造不同的犯罪假设。

我已经花了3天时间阅读http://php.net/manual/pt_BR/mysqli-result.fetch-array.php

上的文档

和“谷歌搜索”它但找不到任何答案。

1 个答案:

答案 0 :(得分:2)

找到了一种方法。我将代码翻译成英文,以便其他人可以拥有它。如果有任何变量名称错误,请使用评论进行修复并享受!

$sql = "SELECT parquet, defendant, action, modusOperandi, victim, crime FROM crime_elements";

//runs '$sql' query to get database data
$result = mysqli_query($con,$sql);

$collNumber = mysqli_num_fields($result);

echo "ColL Number :" . $collNumber;

// Creates $data Array[]
$data = array(); 

while($row = mysqli_fetch_array($result)){
    //inserts received data into "$data" and makes available by array[]index
    $data[] = $row;
}

for($i=0;$i<=$collNumber -1;$i++){
    // Gets the column name from the query()
    $fieldName = mysqli_fetch_field_direct($result, $i)->name;
    echo "</br><b>Coll Name:</b> " . $fieldName . "<br /><br />";

        ${$fieldName} = array_column($data, $i);
    print_r(${$fieldName});
    echo "<br /><b>Specified item choice[]:</b> ". ${$fieldName}[2];
    echo "<hr />";
}