Упростить массив и сохранить как CSV

У меня действительно сложный массив:

stdClass Object
(
[matters] => Array
(
[0] => stdClass Object
(
[id] => 1050370768
[client] => stdClass Object
(
[id] => 939940280
[url] => /api/v2/contacts/939940280
[name] => Balter and Son
)

[display_number] => 00001-Balter and Son
[description] => Sueing for pain of having to program
[status] => Open
[open_date] => 2017-07-26
[close_date] =>
[pending_date] =>
[location] =>
[client_reference] => 34241
[responsible_attorney] => stdClass Object
(
[id] => 345011996
[url] => /api/v2/users/345011996
[name] => jon balter
[email] => [email protected]
)

[originating_attorney] =>
[practice_area] =>
[billable] => 1
[maildrop_address] => [email protected]
[created_at] => 2017-07-26T20:46:14+00:00
[updated_at] => 2017-07-26T20:46:14+00:00
[custom_field_values] => Array
(
)

[billing_method] => hourly
[group_id] => 1654280
[permission] => stdClass Object
(
[id] => 1654280
[url] => /api/v2/groups/1654280
[name] => Firm
)

[activity_rates] => Array
(
)

)

[1] => stdClass Object
(
[id] => 1050770508
[client] => stdClass Object
(
[id] => 940983330
[url] => /api/v2/contacts/940983330
[name] => Seamless Solutions
)

[display_number] => 00002-Seamless Solutions
[description] => This is a matter of life and death
[status] => Open
[open_date] => 2017-08-09
[close_date] =>
[pending_date] =>
[location] =>
[client_reference] =>
[responsible_attorney] =>
[originating_attorney] =>
[practice_area] =>
[billable] => 1
[maildrop_address] => [email protected]
[created_at] => 2017-08-09T21:37:28+00:00
[updated_at] => 2017-08-09T21:37:28+00:00
[custom_field_values] => Array
(
)

[billing_method] => hourly
[group_id] => 1654280
[permission] => stdClass Object
(
[id] => 1654280
[url] => /api/v2/groups/1654280
[name] => Firm
)

[activity_rates] => Array
(
)

)

)

[records] => 2
[limit] => 200
[next_offset] => 1050770508
[order_dir] => asc
[total_records] => 2
[published_at] => 2017-08-09T21:37:38+00:00
)

Я просто хочу получить возврат
Array (
[display_number] => 00001-Балтер и сын
[display_number] => 00002-бесшовные решения
)

Затем возьмите это и сохраните как CSV
00001, Балтер и сын,
00002, бесшовные решения

Любая помощь будет потрясающей.
Я знаю, что должен быть простой способ сделать это.

Кто-то попросил PHP. Немного трудно поставить здесь, но я постараюсь. Это часть API для легального программного обеспечения CLIO.

//Get Matters
$matterarry = matter_numbers ($token);

//get array to just matter numbers
$matternumbers = array(); // initialize the array to be used for the export
foreach($matterarry->matters as $key => $matter) { // loop through all the top level element
// isolate the display number '00001' from '00001-Balter and Son'
$displayNumber = explode('-', $matter->display_number);
$displayNumber = $displayNumber[0];

// push the element the export array using the display_number as the key
$matternumbers[$key] = array(
$displayNumber,  // '00001'
$matter->client->name   // 'Balter and Son'
);
}
Print_r ($matternumbers);

//export to CSV
$f = fopen('/tmp/matternumbers.csv', 'a');  // open the destination file handler
fputcsv($f, array('display_number', 'name')); // start by adding the column headers
// this can also be done by using named keys in your array,
// or having the first element be the value of the headers
// I'm appending manually here for the sake of simplicity
foreach($matternumbers as $key => $element) {
fputcsv($f, $element); // append each element to the file
}
fclose($f); // don't forget to close the file ;)
function matter_numbers ( $token ) {
//$header = array('Authorization: bearer '.$token);
//print_r ($header);
$header = 'Authorization: bearer '.$token;
echo $header."\r\n";
$ch = curl_init();
//curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_URL, 'https://app.goclio.com/api/v2/matters');
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resp = curl_exec($ch);

if( !$resp ) {
die('Error: "' . curl_error( $ch ) . '" - Code: ' . curl_errno( $ch ) );
}

else if ( 200 != curl_getinfo( $ch, CURLINFO_HTTP_CODE ) ) {
echo "Bad Response Code!";
echo "\n";
echo "Response HTTP Status Code : " . curl_getinfo( $ch, CURLINFO_HTTP_CODE );
echo "\n";
echo "Response HTTP Body : " . $resp;
}
//print "curl response is:" . $resp;
$resp = json_decode($resp);

//print_r ($resp);
curl_close($ch);

return $resp;
}

0

Решение

Я попытаюсь ответить на две части вашего вопроса (1) упростить массив, чтобы изолировать определенные элементы, и (2) экспортировать его в .csv файл

Для этого вам нужно будет перебрать все matters элемент вашего исходного объекта и вставьте все значения, которые вы хотите экспортировать, в новый массив с соответствующим форматом

$exportArray = array(); // initialize the array to be used for the export
foreach($initialObject->matters as $key => $matter) { // loop through all the top level element
// isolate the display number '00001' from '00001-Balter and Son'
$displayNumber = explode('-', $matter->display_number);
$displayNumber = $displayNumber[0];

// push the element the export array using the display_number as the key
$exportArray[$key] = array(
$displayNumber,  // '00001'
$matter->client->name   // 'Balter and Son'
);
}

Затем вы получите массив, который должен выглядеть примерно так:

Array [
0 => Array [
0 => '00001'
1 => 'Balter and Son'
]
1 => Array [
0 => '00002'
1 => 'Seamless solutions'
]
]

В качестве альтернативы, вместо цикла по массиву вы можете использовать array_map() и получить аналогичный результат. Если вы не знакомы с array_map() вы можете найти официальный документ Вот

$exportArray = array_map(function($matter) {
// isolate the display number '00001' from '00001-Balter and Son'
$displayNumber = explode('-', $matter->display_number);
$displayNumber = $displayNumber[0];

return array(
$displayNumber,
$matter->client->name
);
}, $initialObject->matters)

Эта часть на самом деле довольно проста, так как PHP имеет функцию специально для этого (Официальный документ)

$f = fopen('/tmp/myFile.csv', 'a')  // open the destination file handler

fputcsv($f, array('display_number', 'name')) // start by adding the column headers
// this can also be done by using named keys in your array,
// or having the first element be the value of the headers
// I'm appending manually here for the sake of simplicity
foreach($exportArray as $key => $element) {
fputcsv($f, $element); // append each element to the file
}
fclose($f) // don't forget to close the file ;)

Цикл по элементам, которые вы хотите экспортировать дважды, утомителен и повлияет на удобочитаемость и удобство обслуживания. Вот почему вам, вероятно, следует объединить эти примеры в один цикл.

$file = fopen('/tmp/myFile.csv', 'a'); // open the destination file handler
fputcsv($file, array('display_number', 'name')); // add the column headers

foreach($initialObject->matters as $key => $matter) { // loop through all the top level element
// isolate the display number '00001' from '00001-Balter and Son'
$displayNumber = explode('-', $matter->display_number);
$displayNumber = $displayNumber[0];

// Add the information you need directly in the file
fputcsv($file, array($displayNumber, $matter->client->name));
}
fclose($file);

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]