Получить данные объекта массива из разнесенных полей массива в цикле foreach - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь извлечь данные из наших JSON данных на основе заданных полей вывода, но я не получаю хорошего результата.

например,

Данные поля, которые я хочу :

Array
(
    [0] => id
    [1] => name
    [2] => email
    [3] => optin_email
)

Эти поля существуют в моей строке данных, я хочу экспортировать их в CSV.

Я могу сделать это, в жестком коде

foreach ($jsonString as $value) {

    $row = [
        $value->id,
        $value->name,
        $value->email,
        $value->phone
    ];

    print_r($row);
}

Выше будет дай мне список / файл, который мне нужен. НО, я хочу сделать эту динамику c на основе данных в массиве, поэтому, например, для примера это Array:

Array
(
    [0] => id
    [1] => name
)

Это должен быть мой вывод:

foreach ($jsonString as $value) {

    $row = [
        $value->id,
        $value->name
    ];

    print_r($row);
}

Так что мне нужно динамически создать

$value->{var}

Я пытался вечно, но больше не вижу этого прямо.

Пробовал это:

$rowFields = '';       
foreach ($export_datafields AS $v) {
            $rowFields .= '$value->' . $v . ',';
        }
    $trimmed_row_fields = rtrim($rowFields, ',');

    foreach ($jsonString as $value) {

        $row = $trimmed_row_fields;
        print_r($row);
    }

И несколько вариантов этого:

foreach ($jsonString as $value) {

    $row = [$trimmed_row_fields];
    print_r($row);
}

Вопрос: как я могу получить

$value->VAR

в качестве действительного ключа массива, когда я знаю только имя VAR и мне нужен префикс $ value-> object.

1 Ответ

0 голосов
/ 30 марта 2020

Я использовал следующий код, который работает для меня. Если у кого-нибудь еще есть ответ на мой оригинальный вопрос, пожалуйста, стреляйте. Всегда приятно все это знать.

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$csvFileName");
header("Pragma: no-cache");
header("Expires: 0");

$new_row = implode(",", $export_datafields) . "\n";

foreach ($jsonString as $value) {
    foreach ($export_datafields AS $v) {
        $new_row .= $value->$v . ',';
    }
    $new_row = substr($new_row, 0, -1);

    $new_row .= "\n";
}
echo $new_row;
...