【问题标题】:how to get the key and value in the object in list of array如何获取数组列表中对象中的键和值
【发布时间】:2019-09-11 11:29:24
【问题描述】:

如何在对象列表中获取不同的键($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
    )
)

【问题讨论】:

  • 我不确定我是否遵循,你能举一个理想结果的例子吗?
  • 您是说对于每个键,您想用其他具有相同键的值创建另一个对象吗?我不确定我是否理解正确
  • 大家好,我编辑了这个问题。
  • 啊,现在我明白了,您所要做的就是在您的对象中创建一个foreach 循环,该对象包含您的所有信息(您想要放入表格中的信息)并打印每一行一个表格行

标签: php arrays laravel object key-value


【解决方案1】:

您可以这样做,这不是世界上最好的方法,但它确实有效,您可以将其用作示例。首先,您创建一个带有表头标题的列表,然后首先打印表头和值。

<?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";
}

【讨论】:

    【解决方案2】:

    可以先用array_keys()array_collapse()获取数组的key:

    $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 转换为数组)是列数组可以以您认为合适的任何方式使用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多