在CodeIgniter模型类中,给定一个返回未知表列的查询
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'myDatabase' AND TABLE_NAME = 'assets';";
return $this->db->query($sql)->result();
CodeIgniter文档提供了使用已知对象属性循环查询结果的示例:
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
我需要使用foreach做同样的事情,但我不一定知道属性的名称(表列名称),甚至不知道有多少(就像有多少表列一样)
如果我可以使用foreach循环,那将是很好的,如
foreach($result as $row){
for($i=0;$i<count($row);$i++){
echo $row[$i] . "<br>";
}
}
...但这会产生错误Cannot use object of type stdClass as array
Array
( [0] =&gt; stdClass对象 ( [COLUMN_NAME] =&gt; as_id )
[1] => stdClass Object
(
[COLUMN_NAME] => as_type
)...(etc)
答案 0 :(得分:2)
实际上,using a regular foreach
loop可以迭代一个对象,就像迭代一个数组来读取键和值一样。
根据您的$query->result()
数组,您可以使用嵌套foreach
进行迭代:
foreach ($query->result() as $row) {
// The object can be looped with foreach
// using $property as the prop name and $value as the value
foreach ($row as $property => $value) {
echo "Property: $property, Value: $value\n";
}
}
现在,您正在针对information_schema.columns
执行已知查询,该查询返回的唯一结果列为COLUMN_NAME
。因此,迭代result()
并阅读COLUMN_NAME
属性实际上会为您提供所需的值:
foreach ($query->result() as $row) {
// The only column returned is COLUMN_NAME
echo $row->COLUMN_NAME;
}
换句话说,虽然查询将返回未知数量的字符串值表示 MySQL表列名称,但查询本身不返回一组未知的列 - 它总是返回名为COLUMN_NAME
的一个列;它本身并不是动态的。
答案 1 :(得分:1)
你现在可以使用foreach遍历数组,在第一个foreach中访问每个记录,并在其他foreach中遍历数组并获取值
foreach ($query->result() as $row)
{
foreach($row as $column=> $value)
{
echo "column name is $column and its value is $value </br>";
}
}
希望你能得到它的概念