0

一意のIDに基づいてデータベースから情報を取得する単純なPHP関数があります。

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
)

これは問題ありませんが、1つのレコードだけを返したい場合は$array = oracleGetData('select * from table where id = 1')、次のようなデータが返されます。

[] => Array
(
    [Title] => Title 1
    [Description] => Description 1
)

これを参照する方法がわからないだけでなく(配列を識別するものがない)、関数を何らかの方法で変更したいので、1つのレコードを返すだけの場合は、単純な1次元配列になります。

私は通常のPHP配列関数を調べましたが、役立つものは何も見つかりません。また、配列の深さを簡単に特定する方法も見つかりません。

本当に助けていただければ幸いです、ありがとう

4

3 に答える 3

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
    )
}
于 2012-05-16T11:18:09.973 に答える
1

スクリプトに論理エラーがあると思います。

変化する

$results[ $row[$id] ] = $row;

の中へ

$results[] = $row;

問題は、データベースキーの値を配列キーの値として使用したいが、クエリがどのようになるかわからないため、データベースキーがわからないことです。

あなたは試すことができます:

$results[$row['id']] = $row;

ただし、これは、すべての結果に「id」という名前のデータベースキーがある場合にのみ機能します。

于 2012-05-16T11:15:03.217 に答える
0

関数シグネチャで$idを渡しますが、ループでは$ row [$ id]を使用します。なぜですか?たぶんエラーがあります。

結果セットにシーケンシャルIDが必要な場合は、$ idを使用する必要はなく、array_push()関数を使用できます。

array_push($result, $row);

また

$results[] = $row;
于 2012-05-16T11:21:48.243 に答える