我有一个简单的PHP函数,它将根据唯一的ID从数据库中获取信息:
function oracleGetGata($query, $id="id") {
global $conn;
$results = array();
$sql = OCI_Parse($conn, $query);
OCI_Execute($sql);
while ( false!==($row=oci_fetch_assoc($sql)) ) {
$results[ $row[$id] ] = $row;
}
return $results;
}
因此,例如$array = oracleGetData('select * from table')
将返回:
[1] => Array
(
[Title] => Title 1
[Description] => Description 1
)
[2] => Array
(
[Title] => Title 2
[Description] => Description 2
)
这很好,但是,如果我只想返回一条记录$array = oracleGetData('select * from table where id = 1')
,它会返回如下数据:
[] => Array
(
[Title] => Title 1
[Description] => Description 1
)
我不仅不确定如何引用它(没有任何标识数组)我也想以某种方式改变我的函数,所以如果它只返回一个记录,它将只是一个简单的一维数组。 / p>
我已经研究了通常的PHP数组函数,但是找不到任何有用的东西,也没有找到识别数组深度的简单方法。
非常感谢任何帮助,谢谢
答案 0 :(得分:4)
使用array_pop():
$array = array_pop(oracleGetData('select * from table where id = 1'));
然后您将获得一个单一阵列:
Array
(
[Title] => Title 1
[Description] => Description 1
)
而不是嵌入另一个数组中的数组:
Array
(
[] => Array
(
[Title] => Title 1
[Description] => Description 1
)
}
答案 1 :(得分:1)
我认为您的脚本中存在逻辑错误:
更改
$results[ $row[$id] ] = $row;
进入
$results[] = $row;
问题是,您希望将数据库键值作为数组键值,但您不知道数据库键,因为您不知道查询的外观。
你可以尝试:
$results[$row['id']] = $row;
但这只适用于所有结果都有一个名为" id"的数据库键。
答案 2 :(得分:0)
你在函数签名中传递$ id,但在循环中你使用$ row [$ id],为什么?也许错误就在那里。
如果你想在结果集中输入一个序列id,你不需要使用$ id,你可以使用array_push()函数
array_push($result, $row);
OR
$results[] = $row;