PHP - 删除一个数组层

时间:2012-05-16 11:13:06

标签: php arrays multidimensional-array

我有一个简单的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数组函数,但是找不到任何有用的东西,也没有找到识别数组深度的简单方法。

非常感谢任何帮助,谢谢

3 个答案:

答案 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;