如何在数组列表中的对象中获取键和值

时间:2019-04-22 08:41:03

标签: php arrays laravel object key-value

如何在对象列表中获取不同的键($ key)和多个不同的值($ myObjectValues)?

我的预期结果是不同的键显示为表中的列,其不同的值显示为多行。 ($ key)列不应是硬核,我打算在刀片视图中显示。

理想: enter image description here

当前代码:

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
    )
)

2 个答案:

答案 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数组。

  

如果将数据全部作为数组存储,那么可以轻松使用其上可用的数组函数会更有益。