如何在对象列表中获取不同的键($ key)和多个不同的值($ myObjectValues)?
我的预期结果是不同的键显示为表中的列,其不同的值显示为多行。 ($ key)列不应是硬核,我打算在刀片视图中显示。
当前代码:
foreach($x as $key => $item) {
print_r($key); //this is list number
foreach($item as $key => $myObjectValues){
print_r($key); //this is my object key
print_r($myObjectValues); //this is my object values
}
}
这是json数组对象($ x)。
Array(
[0] => stdClass Object
(
[milk_temperature] => 10
[coffeebean_level] => 124.022
)
[1] => stdClass Object
(
[milk_temperature] => 1099
[soya_temperature] => 10
[coffeebean_level] => 99.022
)
[2] => stdClass Object
(
[milk_temperature] => 1099
[coffeebean_level] => 99.022
)
)
答案 0 :(得分:3)
您可以这样做,虽然它不是世界上最好的方法,但是它可以工作,您可以将其用作示例。首先,使用表标题创建一个列表,然后开始打印标题,然后打印值。
<?php
$x = [
(object) [
'milk_temperature' => 10,
'coffeebean_level' => 124.022
],
(object) [
'milk_temperature' => 1099,
'soya_temperature' => 10,
'coffeebean_level' => 99.022
],
(object) [
'milk_temperature' => 1099,
'coffeebean_level' => 99.022
]
];
// list all the keys
$keys = [];
foreach($x as $key => $item) {
$keys = array_merge($keys, array_keys((array) $item));
}
$keys = array_unique($keys);
// echo the header
foreach ($keys as $key) {
echo $key . ' ';
}
echo "\n";
// echo the values
foreach($x as $item) {
foreach ($keys as $key) {
echo $item->$key ?? '-'; // PHP 7+ solution
// echo isset($item->$key) ? $item->$key : '-'; // PHP 5.6+
echo ' ';
}
echo "\n";
}
答案 1 :(得分:1)
您首先可以使用array_keys()
和array_collapse()
获取数组的键:
$columns = array_keys(array_collapse($records));
然后,使用已存在的相同循环遍历$ records。让我们通过以下示例进行演示:
$columns = array_keys(array_collapse($records));
foreach($records as $key => $item) {
//these are each record
foreach ($columns as $column) {
//each column where you build the header
// converts $item to an array
$item = (array)$item;
if (! array_key_exists($column, (array)$item)) {
// show '---'
echo '---';
continue;
}
//show $item[$item]
echo $item[$column];
}
}
这样做的最大好处是,首先获取列(除了将stdClass转换为数组外)是,可以按您认为合适的任何方式使用columns数组。
如果将数据全部作为数组存储,那么可以轻松使用其上可用的数组函数会更有益。