1

我正在尝试从数据库中获取一些特定的键和值。我的数据库条目如下所示:

id | name | description      | value
------------------------------------------
1  | lang | default language | en
2  | date | date format      | YYYY-MM-DD

我只想回显我的namevalue字段。我尝试过使用嵌套的 foreach 循环,如下所示:

foreach($details as $key => $value)
{
    foreach($value as $index => $row)
    {
        echo $index . " / " . $row . "<br />";
    }
    echo "<br />";
}

但这只是回声:

id / 1
name / lang
description / default language
value / en

id / 2
name / date
description / date format
value / YYYY-MM-DD

但是,当我添加一个偏移量时,像这样:$index[1],我得到这个,a而不是 name,或者e而不是description.

我以前使用 循环从while循环中工作mysql_fetch_array,但这会给我一个重复的元素(比如 a <tr>),而我只需要提取字段的值,因为这将用于构建一个供用户管理的表单。

有人会对我做这种事情有什么建议或不同的方法吗?

编辑

查询来自一个类文件:

// extracted from my queries.class.php
public function my_prefs()
{
   global $db;
   $query = "SELECT * FROM preferences WHERE value!=NULL";
   return $db->select($query);
}
// extracted from the source file 
$module_details = $query->my_prefs();

编辑#2

也许这将帮助您了解我的需求:

foreach($module_details as $key => $value)
{
    print_r($module_details);
}

返回:

Array
(
    [0] => stdClass Object
    (
        [id] => 1
        [name] => lang
        [description] => default language
        [value] => en
    )

    [1] => stdClass Object
    (
        [id] => 1
        [name] => date
        [description] => date format
        [value] => YYYY-MM-DD
    )
}

我只需要访问lang/endate/ YYYY-MM-DD

4

3 回答 3

0

也许我误解了这个问题..

但我相信您正在尝试从数组中访问特定的列条目。您可以使用要输出的键而不是使用数字索引来执行此操作。

foreach($details as $key => $value)
{
   echo $value['name'];
   echo $value['value'];
   echo "<br />";
}

编辑

如果您想限制查询的结果,以便您只有请求替换的字段:

 $query = "SELECT * FROM preferences WHERE value!=NULL";

 $query = "SELECT name, value FROM preferences WHERE value!=NULL";
于 2013-09-11T15:28:08.197 回答
0

听起来你正在寻找这样的东西:

$tmp = array();
foreach($details as $key => $value)
{
    // "name" => "value" dictionary later access
    $tmp[$value["name"]] = $value["value"]; 
    echo $value["name"] . " = " . $value["name"]; // echos e.q. "date = YYYY-MM-DD"
    echo "<br/>";
}

echo $tmp["date"]; // echos e.q. "YYYY-MM-DD"
于 2013-09-11T15:30:25.323 回答
0

终于有时间开始工作了。这是我所做的:

foreach($details as $row)
{
    $name = $row->name;
    $value = $row->value;

    // In order to specify for checkboxes, select, radio, etc.
    if($name == "lang")
    {
        // different info depending on the value
    }
    else
    {
        // do something generic here
    }
}

可能不是最佳选择,但这就像我需要它一样工作。

于 2013-09-12T20:52:43.430 回答