我有一个简单的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
)
我不仅不确定如何引用它(没有标识数组的东西),我还想以某种方式更改我的函数,所以如果它只返回一条记录,它将只是一个简单的一维数组。
我已经研究了通常的PHP数组函数,但找不到任何有用的东西,也没有简单的方法来识别数组的深度。
非常感谢任何帮助,谢谢
使用 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
)
}
我认为您的脚本中存在逻辑错误:
改变
$results[ $row[$id] ] = $row;
到
$results[] = $row;
问题是,您希望将数据库键值作为数组键值,但您不知道数据库键,因为您不知道查询的外观。
你可以试试:
$results[$row['id']] = $row;
但这仅在所有结果都具有名为"id"的数据库键时才有效。
你在
函数签名中传递了一个$id,但在循环中使用$row[$id],为什么?也许错误就在那里。
如果你想在结果集中有一个连续的 id,你不需要使用 $id,你可以使用 array_push() 函数
array_push($result, $row);
或
$results[] = $row;