在关联对象数组中偏移打印数组键


Offset printing array keys in an associative object array

我有一个查询,从数据库返回数据,并将数据存储在一个名为$array的数组中。

使用print_r($array),我接收如下数据:

Array
(
    [0] => stdClass Object
        (
            [Item1] => 1
            [Item2] => 1
            [Item3] => 1
            [Item4] => 'Az'
            [Item5] => 222
            [Item6] => 223
            [Item7] => 21
            [Item8] => 22
        )
) 

我发现我可以返回键Item1Item8使用:

foreach ($array[0] as $key => $a){
  echo '<pre>', $key, '</pre>';
}

然而,我只想从Item4返回到数组的末尾。(删除前3项)

请注意,查询有时返回多行,即$array[0], $array[1],但$array[0]将始终存在,如果有结果。我只需要从数组中获得键一次,因为我想将它们用作表中显示的列标题。

我更喜欢foreach()的情况,因为我只想输出尽可能多的列。

我试着看array_slice(),但我似乎不能让它工作,我的努力显示在下面:

$sliced =  array_slice($prices[0], 3, $preserve_keys = true);
foreach ($sliced as $key => $value){
  echo '<pre>'.$key.'</pre>';
}

你的问题的解决方案比你试图解决它更深刻。

如果DB查询返回一个索引为1的数组…你只需要显示索引4的数据。10 那么你真正需要的是改变DB查询,只返回这些列4..10.

所以基本上不是执行这个查询:

SELECT * FROM table1

你需要执行这样的查询:

SELECT col4, col5, col6, col7, col8, col9, col10
FROM table1

stdClass对象转换为数组并使用array_slice

$neededItems = array_slice((array)$array[0], 4, null, true);

正如您提到的"我更喜欢foreach解决方案…",您可以简单地增加计数器,并且在计数器达到所需值之前不输出任何内容:

$count = 0
foreach ($array[0] as $key => $a){
  $count++;
  if($count > 3){
     echo '<pre>', $key, '</pre>';
  }
}