PHP - 删除一个数组层


PHP - Removing one array layer

我有一个简单的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;