在 PHP 中的关联数组中访问键值

Access key values within an associative array in PHP

我在使用关联数组和 sql 查询时遇到问题。问题是我有一个查询,它的行存储在这样的数组中:

$query21 = "SELECT PROCESSO, DATAMSG, CATEGORIA_DESC, VALOR, CRITICO FROM TABLEX";
$result21 = oci_parse($connect, $query21);
oci_execute($result21);

$c1=array();
while($res21 = oci_fetch_array($result21))  {
    $c1[]=$res21;
}
print_r($c1);

此代码打印如下:

Array
(
    [0] => Array
        (
            [0] => 1647306
            [PROCESSO] => 1647306
            [1] => 2015-04-27 23
            [DATAMSG] => 2015-04-27 23
            [2] => ECG_HR                        
            [CATEGORIA_DESC] => ECG_HR                        
            [3] => 59
            [VALOR] => 59
            [4] => 1
            [CRITICO] => 1
       )
)

问题是我不知道为什么它会重复两次结果。我期望这样的结果:

Array
(
    [0] => Array
        (
            [PROCESSO] => 1647306
            [DATAMSG] => 2015-04-27 23                       
            [CATEGORIA_DESC] => ECG_HR                        
            [VALOR] => 59
            [CRITICO] => 1
       )
)

另外,如何访问 [PROCESSO],...,[CRITICO] 键值?我试过但只能访问保存数组的 $c1['0'] 键,尽管我需要里面的值。

因为默认oci_fetch_array()使用OCI_BOTH抓取模式;这意味着它 returns 具有关联索引和数字索引的数组。您可以使用...显式关闭数字索引

oci_fetch_array($result21, OCI_ASSOC)

... 或者只使用 oci_fetch_assoc()

您也可以考虑完全放弃 while,而仅在逐行填充模式下使用 oci_fetch_all()

oci_fetch_all($result21, $c1, null, null, OCI_FETCHSTATEMENT_BY_ROW);

在任何一种情况下,您都可以使用迭代任何其他数组的相同技术来迭代这些数组。例如:

foreach ($c1 as $row) {
  foreach ($row as $key => $value) {
    echo $key, ' is ', $value, '<br />';
  }
}