How to remove extra array in arrays list in laravel - php

Screenshot
As you see my data are loaded inside extra SNHISTORY array and I need to remove that extra array.
Code
Lines regarding to screenshot results are commented.
$array = [];
foreach($internalTransits as $key => $item) {
foreach($item->barcodes as $barcode){}
$a = $item->barcodes;
$grouped = $a->mapToGroups(function ($item, $key) {
return [
'SNHISTORY' => [ // my arrays to move out
'_attributes' => [
'operation' => 'Ret'
],
'SERIALNUMBER' => $item['serial_number'] ? $item['serial_number'] : $item['u_serial_number'],
'EXPIREDDATE' => $item['created_at']->format('Y-m-d'),
'QUANTITY' => '1',
'SNSIGN' => '-1',
],
'ITEMUNIT' => $item['product']['unit'],
'UNITPRICE' => $item['product']['price'],
];
});
$year = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->year;
$month = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->month;
$timeline[$key][] = [
'_attributes' => [
'operation' => 'Add'
],
'KeyID' => $barcode['product']['id'],
'ITEMNO' => $barcode['product']['sku'],
'QUANTITY' => '1',
'ITEMUNIT' => $barcode['product']['unit'],
'UNITRATIO' => '1',
'ITEMRESERVED1' => '',
'ITEMRESERVED2' => '',
'ITEMRESERVED3' => '',
'ITEMRESERVED4' => '',
'ITEMRESERVED5' => '',
'ITEMRESERVED6' => '',
'ITEMRESERVED7' => '',
'ITEMRESERVED8' => '',
'ITEMRESERVED9' => '',
'ITEMRESERVED10' => '',
'UNITPRICE' => $barcode['product']['price'],
'QTYCONTROL' => '0',
'SNHISTORY' => $grouped->toArray(), // this has extra array where my actual arrays are loaded inside of it
];
$array['TRANSACTIONS'] = [
'_attributes' => [
'OnError' => 'CONTINUE'
],
];
$array['TRANSACTIONS']['WTRAN'] = [
'_attributes' => [
'operation' => 'Add',
'REQUESTID' => '1',
],
'TRANSFERID' => $item['id'],
'TRANSACTIONID' => '',
'TRANSFERNO' => $item['transNu'],
'TRANSFERDATE' => $item['created_at']->format('Y-m-d'),
'DESCRIPTION' => $item['description'],
'FROMWHID' => $barcode['outlet'][0]['name'],
'TOWHID' => $item->toOutlet->name,
'FROMWHADDRESS' => '',
'TOWHADDRESS' => '',
];
$array['TRANSACTIONS']['WTRAN']['ITEMLINE'] = $timeline;
}
What I've tried
I cannot change 'SNHISTORY' => $grouped->toArray(), to something like $grouped->toArray(), under $timeline[$key][] = [ it will return error
I cannot add $array['TRANSACTIONS']['WTRAN']['ITEMLINE']['SNHISTORY'] = $grouped->toArray(); and remove 'SNHISTORY' => $grouped->toArray(), it will return error known bug
Question
How can I remove extra SNHISTORY around my data?

As mentioned in the comments section, you probably want to merge both arrays together:
$timeline[$key][] = [
'_attributes' => [
'operation' => 'Add'
],
'KeyID' => $barcode['product']['id'],
'ITEMNO' => $barcode['product']['sku'],
'QUANTITY' => '1',
'ITEMUNIT' => $barcode['product']['unit'],
'UNITRATIO' => '1',
'ITEMRESERVED1' => '',
'ITEMRESERVED2' => '',
'ITEMRESERVED3' => '',
'ITEMRESERVED4' => '',
'ITEMRESERVED5' => '',
'ITEMRESERVED6' => '',
'ITEMRESERVED7' => '',
'ITEMRESERVED8' => '',
'ITEMRESERVED9' => '',
'ITEMRESERVED10' => '',
'UNITPRICE' => $barcode['product']['price'],
'QTYCONTROL' => '0',
] + $grouped->toArray();

as i can see in your screen shot data
you are getting xml data you need to convert that into array
function xmlToArray($xml_string)
{
$doc = #simplexml_load_string($xml_string);
if ($doc) {
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
return json_decode($json, true);
}
}
then u will get real array then u don't need to remove that as that is a parent key

Related

How to have second loop inside my first loop

I am using array-to-xml package and I have sample (static) data like this one
<RECIEVEITEM operation="Add" REQUESTID="1">
<TRANSACTIONID>264276</TRANSACTIONID>
<ITEMLINE operation="Add">
<KeyID>1</KeyID>
<ITEMNO>7GE65B</ITEMNO>
<QUANTITY>5</QUANTITY>
<ITEMUNIT>UNT</ITEMUNIT>
<UNITRATIO>1</UNITRATIO>
<ITEMRESERVED1 />
<ITEMRESERVED2 />
<ITEMRESERVED3 />
<ITEMRESERVED4 />
<ITEMRESERVED5 />
<ITEMRESERVED6 />
<ITEMRESERVED7 />
<ITEMRESERVED8 />
<ITEMRESERVED9 />
<ITEMRESERVED10 />
<ITEMOVDESC>PRINTER HP DESKJET 2135 (7GE65B) NEW</ITEMOVDESC>
<UNITPRICE />
<ITEMDISCPC />
<TAXCODES />
<GROUPSEQ />
<POSEQ />
<BRUTOUNITPRICE>0</BRUTOUNITPRICE>
<WAREHOUSEID>345346</WAREHOUSEID>
<QTYCONTROL>0</QTYCONTROL>
<RISEQ />
<SNHISTORY operation="Ret"><SERIALNUMBER>A1</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>
<SNHISTORY operation="Ret"><SERIALNUMBER>A2</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>
<SNHISTORY operation="Ret"><SERIALNUMBER>A3</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>
<SNHISTORY operation="Ret"><SERIALNUMBER>A4</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>
<SNHISTORY operation="Ret"><SERIALNUMBER>A5</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>
<RIID />
</ITEMLINE>
<INVOICENO>PO-TEST1</INVOICENO>
<INVOICEDATE>2020-06-30</INVOICEDATE>
<TAX1ID>T</TAX1ID>
<TAX1CODE>T</TAX1CODE>
<TAX2CODE />
<TAX1RATE>10</TAX1RATE>
<TAX2RATE>0</TAX2RATE>
<RATE>1</RATE>
<INCLUSIVETAX>0</INCLUSIVETAX>
<INVOICEISTAXABLE>1</INVOICEISTAXABLE>
<CASHDISCOUNT>0</CASHDISCOUNT>
<CASHDISCPC />
<INVOICEAMOUNT>0</INVOICEAMOUNT>
<TERMSID>Net 30</TERMSID>
<FOB />
<PURCHASEORDERNO />
<WAREHOUSEID>345346</WAREHOUSEID>
<DESCRIPTION>PO-TEST1</DESCRIPTION>
<SHIPDATE>2020-06-30</SHIPDATE>
<POSTED>0</POSTED>
<FISCALRATE>1</FISCALRATE>
<INVFROMPR />
<TAXDATE>2020-06-30</TAXDATE>
<VENDORID>PT ECS INDO JAYA</VENDORID>
<SEQUENCENO>PO-TEST1</SEQUENCENO>
<APACCOUNT>2000.01</APACCOUNT>
<SHIPVENDID />
<INVTAXNO2 />
<INVTAXNO1 />
<SSPDATE />
<EXPENSESOFBILLID />
<EXPENSESJOURNALDATETYPE />
<LOCKED_BY />
<LOCKED_TIME />
</RECIEVEITEM>
As you can see tag SNHISTORY includes array, since RECIEVEITEM itself is inside an array I would like to know how can I achieve to have SNHISTORY array?
Code
Commented issue part for you to find is faster :)
public function exportReturn(Request $request) {
$returnProducts = ReturnProduct::with(['barcode', 'barcode.product', 'barcode.product.allBarcodes', 'outlet', 'user',])->get();
foreach($returnProducts as $item) {
$year = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->year;
$month = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->month;
$array = [
"TRANSACTIONS" => [
'_attributes' => [
'OnError' => 'CONTINUE'
],
'RECIEVEITEM' => [ // image 1
'_attributes' => [
'operation' => 'Add',
'REQUESTID' => '1'
],
'TRANSACTIONID' => $item['id'],
'ITEMLINE' => [
'_attributes' => [
'operation' => 'Add'
],
'KeyID' => $item['barcode']['product']['id'],
'ITEMNO' => $item['barcode']['product']['sku'],
'QUANTITY' => $item['barcodes']['product']->allBarcodes->count(),
'ITEMUNIT' => $item['barcode']['product']['unit'],
'UNITRATIO' => '1',
'ITEMRESERVED1' => '',
'ITEMRESERVED2' => '',
'ITEMRESERVED3' => '',
'ITEMRESERVED4' => '',
'ITEMRESERVED5' => '',
'ITEMRESERVED6' => '',
'ITEMRESERVED7' => '',
'ITEMRESERVED8' => '',
'ITEMRESERVED9' => '',
'ITEMRESERVED10' => '',
'ITEMOVDESC' => $item['barcode']['product']['name'],
'UNITPRICE' => $item['barcode']['product']['price'],
'ITEMDISCPC' => '',
'TAXCODES' => '',
'GROUPSEQ' => '',
'POSEQ' => '',
'BRUTOUNITPRICE' => '0',
'WAREHOUSEID' => $item['outlet']['code'],
'QTYCONTROL' => '0',
'RISEQ' => '',
'SNHISTORY' => [ // array of product barcodes
'_attributes' => [
'operation' => 'Ret'
],
foreach($item['barcodes']['product']->allBarcodes as $bb) { // this is WRONG (is just here for you to know about data that I need to place here "logic purpose only")
'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],
'EXPIREDDATE' => $bb['created_at'],
'QUANTITY' => '1',
'SNSIGN' => '1',
}
],
'RIID' => '',
],
'INVOICENO' => 'POINS-001', //test
'INVOICEDATE' => '2020-06-10', //test
'TAX1ID' => 'T', //test
'TAX1CODE' => 'T', //test
'TAX2CODE' => '',
'TAX1RATE' => '10', //test
'TAX2RATE' => '0', //test
'RATE' => '1', //test
'INCLUSIVETAX' => '0', //test
'INVOICEISTAXABLE' => '1', //test
'CASHDISCOUNT' => '0', //test
'CASHDISCPC' => '',
'INVOICEAMOUNT' => '0', //test
'TERMSID' => 'Net 30', //test
'FOB' => '',
'PURCHASEORDERNO' => '',
'WAREHOUSEID' => $outlet['code'], //test
'DESCRIPTION' => '', // reason of return goes here
'SHIPDATE' => '2020-06-10', //test
'POSTED' => '0', //test
'FISCALRATE' => '1', //test
'INVFROMPR' => '',
'TAXDATE' => '2020-06-10', //test
'VENDORID' => 'PT ECS INDO JAYA', //test
'SEQUENCENO' => 'POINS-001', //test
'APACCOUNT' => '2000.01', //test
'SHIPVENDID' => '',
'INVTAXNO2' => '',
'INVTAXNO1' => '',
'SSPDATE' => '',
'EXPENSESOFBILLID' => '',
'EXPENSESJOURNALDATETYPE' => '',
'LOCKED_BY' => '',
'LOCKED_TIME' => '',
]
]
];
}
$filename = 'returns.xml';
$result = ArrayToXml::convert($array, [
'rootElementName' => 'NMEXML',
'_attributes' => [
'EximID'=> "12551",
'BranchCode'=> $item['outlet']['code'],
'ACCOUNTANTCOPYID'=> ""
]
]);
Storage::disk('local')->put($filename, $result);
$fullPath = url('exports', $filename);
return response()->json([
'data' => $fullPath
]);
}
Questions
How to loop SNHISTORY data?
UPDATE
I have changed my code like:
$array = [];
foreach($returnProducts as $item) {
$year = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->year;
$month = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->month;
foreach($item['barcode']['product']->allBarcodes as $bb) {
$shin[] = [
'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],
'EXPIREDDATE' => $bb['created_at'],
'QUANTITY' => '1',
'SNSIGN' => '1',
];
}
$array['RECIEVEITEM'] = [
'_attributes' => [
'operation' => 'Add',
'REQUESTID' => '1'
],
'TRANSACTIONID' => $item['id'],
'ITEMLINE' => [
'_attributes' => [
'operation' => 'Add'
],
'KeyID' => $item['barcode']['product']['id'],
'ITEMNO' => $item['barcode']['product']['sku'],
'QUANTITY' => $item['barcode']['product']->allBarcodes->count(),
'ITEMUNIT' => $item['barcode']['product']['unit'],
'UNITRATIO' => '1',
'ITEMRESERVED1' => '',
'ITEMRESERVED2' => '',
'ITEMRESERVED3' => '',
'ITEMRESERVED4' => '',
'ITEMRESERVED5' => '',
'ITEMRESERVED6' => '',
'ITEMRESERVED7' => '',
'ITEMRESERVED8' => '',
'ITEMRESERVED9' => '',
'ITEMRESERVED10' => '',
'ITEMOVDESC' => $item['barcode']['product']['name'],
'UNITPRICE' => $item['barcode']['product']['price'],
'ITEMDISCPC' => '',
'TAXCODES' => '',
'GROUPSEQ' => '',
'POSEQ' => '',
'BRUTOUNITPRICE' => '0',
'WAREHOUSEID' => $item['outlet']['code'],
'QTYCONTROL' => '0',
'RISEQ' => '',
'SNHISTORY' => [
'_attributes' => [
'operation' => 'Ret'
],
$shin,
],
'RIID' => '',
],
'INVOICENO' => 'POINS-001', //test
'INVOICEDATE' => '2020-06-10', //test
'TAX1ID' => 'T', //test
'TAX1CODE' => 'T', //test
'TAX2CODE' => '',
'TAX1RATE' => '10', //test
'TAX2RATE' => '0', //test
'RATE' => '1', //test
'INCLUSIVETAX' => '0', //test
'INVOICEISTAXABLE' => '1', //test
'CASHDISCOUNT' => '0', //test
'CASHDISCPC' => '',
'INVOICEAMOUNT' => '0', //test
'TERMSID' => 'Net 30', //test
'FOB' => '',
'PURCHASEORDERNO' => '',
'WAREHOUSEID' => $item['outlet']['code'], //test
'DESCRIPTION' => '', // reason of return goes here
'SHIPDATE' => '2020-06-10', //test
'POSTED' => '0', //test
'FISCALRATE' => '1', //test
'INVFROMPR' => '',
'TAXDATE' => '2020-06-10', //test
'VENDORID' => 'PT ECS INDO JAYA', //test
'SEQUENCENO' => 'POINS-001', //test
'APACCOUNT' => '2000.01', //test
'SHIPVENDID' => '',
'INVTAXNO2' => '',
'INVTAXNO1' => '',
'SSPDATE' => '',
'EXPENSESOFBILLID' => '',
'EXPENSESJOURNALDATETYPE' => '',
'LOCKED_BY' => '',
'LOCKED_TIME' => '',
];
}
Now if I do return response()->json($shin); it returns data just as I need them
But When I try to use $shin in my code (as you see in my update code it doesn't work.
Error? it give error about 100 lines above my code (really not helpful error message)
here is the error in preview tab
exception: "DOMException"
file: "..........\vendor\spatie\array-to-xml\src\ArrayToXml.php"
line: 152
message: "Invalid Character Error"
here is where i track my controller in response tab
{
"file": "........\\app\\Http\\Controllers\\Api\\XmlExportController.php",
"line": 869,
"function": "convert",
"class": "Spatie\\ArrayToXml\\ArrayToXml",
"type": "::"
},
{
"function": "exportReturn",
"class": "App\\Http\\Controllers\\Api\\XmlExportController",
"type": "->"
},
Any idea?
UPDATE 2
Well I managed to get my SNHISTORY looped data as array but the issue is while $item['barcode']['product']->allBarcodes only includes current product barcodes during print somehow it print all barcodes even from other products.
foreach($item['barcode']['product']->allBarcodes as $bb) {
$shin[] = [
'_attributes' => [
'operation' => 'Ret'
],
'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],
'EXPIREDDATE' => $bb['created_at'],
'QUANTITY' => '1',
'SNSIGN' => '1',
];
}
and in my xml code
'SNHISTORY' => [
$shin,
],
now it prints like:
result of return response()->json($item['barcode']['product']->allBarcodes);
any idea?
Solved
After doing UPDATE 2 i could fix my extra data by adding $shin = []; above my loop code.
$shin = [];
foreach($item['barcode']['product']->allBarcodes as $bb) {
$shin[] = [
'_attributes' => [
'operation' => 'Ret'
],
'SERIALNUMBER' => $bb->serial_number ? $bb->serial_number : $bb->u_serial_number,
'EXPIREDDATE' => $bb->created_at,
'QUANTITY' => '1',
'SNSIGN' => '1',
];
}
and
'SNHISTORY' => [
$shin,
],
Works as it should be now.

Add array in exiting array in php

I have a json. First i have to decode then add loop on a specific key of json.
public function saveRecode() {
$json ='{"productID":"1","productPrice":"5585.00","productDetails":{"productImage":"https:\/\/development.modeconfigurator.com\/eCommerce\/backdrop.jpg","TABLE TOP":"COPPER DISTRESSED","TABLE FRAME":"RAL 5024 PASTEL BLUE"},"_":"1583172411557"}';
$jsonDecode = json_decode($json, true);
foreach ($jsonDecode["productDetails"] as $key => $value) {
$options = [
'0' => [
'sort_order' => '1',
'title' => $key,
'price_type' => 'fixed',
'price' => '',
'type' => 'drop_down',
'is_require' => '0',
'values' => [
'0' =>[
'title' => $value,
'price' => '',
'price_type' => 'fixed',
'sku' => '',
'sort_order' => '0',
'is_delete' => '0',
]
]
]
];
}
foreach ($options as $arrayOption) {
$this->_logger->debug("enter in opt ");
$this->_logger->info(print_r($arrayOption,true));
$option = $this->_options
->setProductId($_product->getId())
->setStoreId($_product->getStoreId())
->addData($arrayOption);
$option->save();
$_product->addOption($option);
}
}
In database only last recode save. But i want to save all parameters please take a loop.
You're replacing $options each time through the loop, not adding a new element to it. It should be:
$options = [];
foreach ($jsonDecode["productDetails"] as $key => $value) {
$options[] = [
'sort_order' => '1',
'title' => $key,
'price_type' => 'fixed',
'price' => '',
'type' => 'drop_down',
'is_require' => '0',
'values' => [
'0' =>[
'title' => $value,
'price' => '',
'price_type' => 'fixed',
'sku' => '',
'sort_order' => '0',
'is_delete' => '0',
]
]
];
}

mongo php library updateOne & insertOne damaging collection

I have an application I am trying to update from legacy to new driver. I am having a problem with collections being damaged when the below code is triggered. I think I have narrowed it down here.
function update($collection,$criteria,$data,$insertIfNotExists = false)
{
if(!empty($collection) && !empty($criteria) && !empty($data)) {
if (!isset($this->collection[$collection])) {
$this->collection[$collection] = (new MongoDB\Client)->hebe->{$collection};
}
if ($insertIfNotExists) {
$oldData = $this->collection[$collection]->findOne($criteria);
if ($oldData == NULL) {
$data['createdDate'] = date("Y-m-d H:i:s");
$data['modifiedDate'] = (isset($data['modifiedDate'])) ? $data['modifiedDate']:date("Y-m-d H:i:s");
/*
return ($this->collection[$collection]->insertOne($data)) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
*/
} else {
$newData = $oldData;
foreach($data as $n=>$v) {
$newData[$n] = $v;
}
$newData['modifiedDate'] = (isset($newData['modifiedDate'])) ? $newData['modifiedDate']:date("Y-m-d H:i:s");
/*
return ($this->collection[$collection]->updateOne($criteria,['$set' => $newData])) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
*/
}
} else {
/*
return ($this->collection[$collection]->updateOne($criteria,['$set' => $data])) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
*/
}
}
}
example variables are
$collection = 'customer'
$criteria = array ( 'number' => '9999',)
$data = array (
'number' => '9999',
'name' => 'Testing Account',
'reference' => 'Peter Smith',
'defaultDeliveryAddress' => 1,
'visitAddress' => '',
'address' => '',
'district' => 'Marknad',
'postAddress' => '',
'orgNumber' => '5562041771',
'phone' => '031-7802700',
'fax' => '031-193328',
'groupCode' => 'int',
'creditCustomer' => '',
'typeOfDelivery' => 'Bil',
'typeOfPayment' => '10',
'emailAddresses' =>
array (
'invoice' => 'email1#domain.com',
'order' => 'email2#domain.com',
'deliveryNote' => 'email3#domain.com',
'packingSlip' => 'email4#domain.com',
),
'orderType' => NULL,
'termsOfDelivery' => 'RC',
'creditLimit' => 100000.0,
'pricelist' => 4,
'pricelist1' => '',
'pricelist2' => '9998',
'pricelist3' => '104',
'discount' => NULL,
'countryCode' => 'SE',
'currencyCode' => 'SEK',
'blocked' => 0,
'deliveryCost' => 0,
'vatCode' => '2',
'email' => 'peremail#domain.com',
'password' => 'password',
'modifiedDate' => '2019-06-25 00:00:00',
'deliveryAddresses' =>
array (
0 =>
array (
'row' => 1,
'name' => 'Test Address',
'address' => 'Box 12345',
'postAddress' => '42246',
'default' => true,
),
1 =>
array (
'number' => '9999',
'name' => 'Testing Address',
'reference' => '13232',
'address' => 'Box 12245',
'postAddress' => '42246',
),
),
'references' =>
array (
0 =>
array (
'number' => '9999',
'name' => 'Testing',
'email' => '',
'password' => '',
),
1 =>
array (
'number' => '9999',
'name' => 'Testing2',
'email' => '',
'password' => 'password',
),
2 =>
array (
'number' => '9999',
'name' => 'Peter Smith',
'email' => '',
'password' => 'password',
),
),
)
Can someone point me in the right direction on what I am doing wrong with updateOne and insertOne. From what I understand by the docs is it supports array.
EDIT: a little background is I upgraded this system and MongoDB from 2.6 to 3.6. I also upgraded mongodb driver from legacy mongo.
The problem was the old data in the collection had quotations and the updateOne/insertOne data did not. Correcting this seem to solve the problem.

parse data from JSON callback using PHP

I receive a callback data from payment site and try to save some values into txt file
Getting an array:
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
Saving all data to txt:
file_put_contents('robot.php', var_export($obj, true) . "\r\n\r\n", FILE_APPEND | LOCK_EX);
The result from txt:
array (
'rrn' => '',
'masked_card' => '444455XXXXXX1111',
'sender_cell_phone' => '',
'response_status' => 'success',
'sender_account' => '',
'fee' => '',
'rectoken_lifetime' => '',
'reversal_amount' => '0',
'settlement_amount' => '0',
'actual_amount' => '370000',
'order_status' => 'approved',
'response_description' => '',
'verification_status' => '',
'order_time' => '04.01.2018 21:53:47',
'actual_currency' => 'JPY',
'order_id' => 1515095627',
'parent_order_id' => '',
'merchant_data' => '[{"name":"custom-field-0","label":"fist_name","value":"john_doe"},{"name":"custom-field-2","label":"phone","value":"07777777777"}]',
'tran_type' => 'purchase',
'eci' => '5',
'settlement_date' => '',
'payment_system' => 'card',
'rectoken' => '',
'approval_code' => '56783909',
'merchant_id' => 14066776208,
'settlement_currency' => '',
'payment_id' => 7487818gg3,
'product_id' => '',
'amount' => '370000',
'sender_email' => 'admin#none.in.ua',
)
How to save in txt separate values from nested array 'merchant_data' - first name and phone?
You can make new array and save it to file:
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
$save = [];
foreach ($obj['merchant_data'] as $data){
$save[] = [
'name' => $data['first_name'],
'phone' => $data['phone'],
];
}
file_put_contents('robot.php', var_export($save, true) . "\r\n\r\n", FILE_APPEND | LOCK_EX);

PHP Multi-Dimensional Arrays Issue

Ok I have a mult-dimensional array which has the following structure...
0 =>
array (
'membership' =>
array (
'member' =>
array (
'name' => '',
'landline' => '',
'libcard' => '',
'mobile' => '',
'email' => '',
),
'updated_at' => '',
'member_id' => 12345,
'starts_at' => '',
'id' => 14,
'group_id' => 280,
'optional_field_values' =>
array (
0 =>
array (
'optional_field' =>
array (
'name' => '',
'updated_at' => '',
'id' => 1,
'group_id' => 280,
'description' => '',
'created_at' => '',
),
'updated_at' => '',
'optional_field_id' => 1,
'membership_id' => 14,
'id' => 4,
'value' => '12539267',
'created_at' => '',
),
),
'ends_at' => '',
'joining_fee' => 0,
'created_at' => '',
),
),
Now I can access everything inside Membership and inside Member using code like...
$member[0]['membership']['member']['name']
or
$member[0]['membership']['joining_fee']
But when ever I try to access stuff inside optional_field_values I get nothing returned...
Any ideas why this is not working?
Edit:
Trying to access the field using code like...
$member[0]['membership']['optional_field_values']['value']
$member[0]['membership']['optional_field_values'][0]['value']
^ Should work...
(Edited to match OP's edit)
How about :
$member[0]['membership']['optional_field_values'][0]['value']
You can iterate over all optional field values like this :
foreach ($member[0]['membership']['optional_field_values'] as $field)
echo $field['value'];

Categories