【问题标题】:fetch 2 columns from table in 2 array php mysql从2数组php mysql中的表中获取2列
【发布时间】:2014-12-11 07:23:51
【问题描述】:

我有一个 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} = 数组();

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

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

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

“未定义的偏移量: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() 时,它可以工作:

SELECT candy FROM kids.

但是,像这样,我需要大约 600 行重复的代码来获得我想要的内容,并为数据库表上的每个新 coll 一次又一次地复制/粘贴。

有什么想法吗?

我需要它来将数组放入 HTML &lt;SELECT&gt;&lt;OPTION&gt;&lt;/SELECT&gt; ,然后使用mt_rand() 洗牌,得到不同的“profiles”。这不会与孩子的东西一起使用,这只是一个例子。 它将是一个虚拟犯罪创造者,它将对变量进行洗牌,为法学院学生创造不同的犯罪假设。

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

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

【问题讨论】:

  • 因为我不知道如何让它工作。我已经尝试过了,但我得到的只是错误。任何代码建议将不胜感激。
  • 亲爱的我删除了我的答案。是的,我现在知道你想要什么。抱歉,我无法在这方面为您提供帮助。
  • 给我那个。我什么都接受。哈哈哈!
  • Arif,我明天试试这个,然后告诉你。因为现在是凌晨 1 点 24 分,我明天还要上班。从现在开始,谢谢!
  • 我按照你说的做了,得到了这个,Arif:mysql_fetch_assoc() 期望参数 1 是资源,布尔值在... 不知道是否相关,但我使用 mysqli() 进行连接

标签: php arrays select mysqli fetch


【解决方案1】:

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

$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 />";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多