PHP:在另一个获取数据库行的数组中包含一个数组

时间:2015-07-29 14:36:24

标签: php mysql foreach while-loop rows

while循环获取DB行:

    while($row = $result->fetch_assoc()){
        $metadata_field74[] = $row['field74'];
        $metadata_field75[] = $row['field75'];
        $metadata_field76[] = $row['field76'];
        $metadata_field77[] = $row['field77'];
    }

这些行基于另一个DB表。基本上,这个循环应该根据从DB查询接收到的另一个值数组来获取行。

这些值(field74,field75等)存储在数组$ metadata_id_basic []中。 我从这个数组中得到这样的值并插入到while循环中:

    while($row = $result->fetch_assoc()){

        foreach ($metadata_id_basic as $value){
            $ref = '$metadata_'.$value.'[] = $row[\''.$value.'\'];';
            echo $ref;
        }
    }

但是没有看到行数组。如果我打印$ ref,它看起来像:

        $metadata_field74[] = $row['field74'];
        $metadata_field75[] = $row['field75'];
        $metadata_field76[] = $row['field76'];
        $metadata_field77[] = $row['field77'];

那么为什么while循环没有正确读取它?

3 个答案:

答案 0 :(得分:1)

我不知道该怎么做。

  '$metadata_'.$value.'[] = $row[\''.$value.'\'];';

但是,也许它应该是这样的?

$metadata[$value][] = $row[$value];

你应该在某处初始化$metadata = array()。如果你真的想要这个

 '$metadata_'.$value.'[]

我建议这样做。

  ${'metadata_'.$value}[] = .....

然后它将是您可以正常使用的实际变量。你现在拥有的只是一个字符串或另一种方式,只是单词..

这可能是你想要的,在这种情况下,你仍然想要这个

   $ref =  '$metadata_'.$value.'[] = '.$row[$value];

我不知道这意味着什么,例如So why does the while loop not read it correctly?什么是正确的?

另外,如果不知道$metadata_id_basic是什么或者你想要获得什么作为最终结果,很难说,但如果你只想要$row的钥匙,你可以在没有外部依赖的情况下这样做。

  foreach ($row as $key => $value){

例如

答案 1 :(得分:0)

该行

$ref = '$metadata_'.$value.'[] = $row[\''.$value.'\'];';

将汇总一个字符串而不是初始化变量。

看看:Multidimensional Arrays

答案 2 :(得分:0)

foreach循环只是回显一个字符串,而不是用数据库中的值填充变量。

另外,我不确定你的代码中是否需要数组中的数据或多个变量,所以这里有两个版本

将数据放入多个单独的变量中:

while($row = $result->fetch_assoc()){

    foreach ($metadata_id_basic as $value){
        $var_name = metadata_' . $value;
        $$var_name = $row[$value];
        echo '$' . $var_name . ' : ' . $$var_name;
    }
}

这应该创建$metadata_XXXXX变量。

将数据放入数组中,按$metadata_id_basic索引:

$metadata = array();
while($row = $result->fetch_assoc()){

    foreach ($metadata_id_basic as $value){
        $metadata[$value] = $row[$value];
    }
}

print_r($metadata);

echo和print_r语句在那里显示已创建的内容。