как получить ключ и значение в объекте в списке массива - PullRequest
0 голосов
/ 22 апреля 2019

Как получить отдельные ключи ($ 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 ]

3 голосов
/ 22 апреля 2019

Вы можете сделать это так, это не лучший подход в мире, но он работает, и вы можете использовать его в качестве примера.Сначала вы создаете список с заголовками таблиц, а затем начинаете с печати заголовка и затем значений.

<?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 голос
/ 22 апреля 2019

Сначала вы можете получить ключи массива с помощью array_keys() и array_collapse():

$columns = array_keys(array_collapse($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 в массив) в том, что массив столбцов можно использовать любым способом, который вы считаете нужным.

Было бы более полезно, если бы вы могли хранить все данные в виде массива, тогда вы можете легко использовать функции массива, доступные на нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...