Working with 2 json arrays with connected data via ID - php

Been trying to work with two arrays and extract information from the arrays. I can do this with the foreach but I have linked file references (an ID) which targets data in another array.
Array 1 -
Array
(
[type] => land
[id] => 0b1b522e-0cd2-4880-b3ac-a5d86bc2e837
[relationships] => Array
(
[address] => Array
(
[data] => Array
(
[type] => address
[id] => bb89e6c3-9114-4192-a0a7-82c08402d36e
)
)
[details] => Array
(
[data] => Array
(
[type] => details
[id] => f8f0e489-bb86-4857-a815-ab6338d90f26
)
)
[lettingsListing] => Array
(
[data] =>
)
[primaryImage] => Array
(
[data] => Array
(
[type] => media
[id] => 58574088-01a2-45da-a66e-cd3ce1741377
)
)
[images] => Array
(
[data] => Array
(
[0] => Array
(
[type] => media
[id] => 58574088-01a2-45da-a66e-cd3ce1741377
)
[1] => Array
(
[type] => media
[id] => 32d9d605-d55d-48b7-aa62-5e22f762f165
)
[2] => Array
(
[type] => media
[id] => c879656a-a34f-4c93-b6c7-49d3c7b11804
)
[3] => Array
(
[type] => media
[id] => 434f8d79-df19-474d-a275-6c9a5fb0985b
)
[4] => Array
(
[type] => media
[id] => cefccee0-cd30-4c69-9f6f-2bd76116a619
)
[5] => Array
(
[type] => media
[id] => c0377f6c-4279-4176-a5bd-0190b7fd97a8
)
[6] => Array
(
[type] => media
[id] => 6869c65a-bb55-4b9f-8dc1-71ffa5eb84dc
)
[7] => Array
(
[type] => media
[id] => c9b13725-059a-4c96-a8fd-77c9fc9fe05f
)
[8] => Array
(
[type] => media
[id] => edbdddb2-afc7-43ab-9a79-94e0e8e63597
)
[9] => Array
(
[type] => media
[id] => 320de2d7-6ecd-4ec7-9250-f72e228be8a7
)
[10] => Array
(
[type] => media
[id] => 63daaccf-d8d2-4b55-aece-5a01e379fba0
)
[11] => Array
(
[type] => media
[id] => 5d2c253a-03f5-4ea0-b06d-dd17c80d5f3b
)
)
)
)
)
The images in the array are like:
[0] => Array
(
[type] => media
[id] => 58574088-01a2-45da-a66e-cd3ce1741377
)
The ID then corresponds to another array (array 2)
Array
(
[type] => media
[id] => 58574088-01a2-45da-a66e-cd3ce1741377
[attributes] => Array
(
[name] => p048205_01
[order] => 1
[is_featured] =>
[feature_index] =>
[title] =>
[is_image] => 1
[url] => ***urlhere***
)
)
)
So my question is how to get the associated data ([url]) with each ID from the other array. I thought about array_merge but that did not help. My only other thinking is to do a foreach inside the current loop but I have heard it best to not to that?

Create a new array to hold the image urls from what you called array2, but which has the id as the key, so you can jump straight to the URL from your other foreach loop.
$img_urls = []
foreach( $array2 as $a ) {
$img_urls[$a['id']] = $a;
}
Or if you only want the url in this new array
$img_urls = []
foreach( $array2 as $a ) {
$img_urls[$a['id']] = $a['attributes']['url'];
}

As RiggsFolly said, you need to manipulate the second array with images like this:
$new_arr_images = [];
foreach ($arr_images as $value) {
$new_arr_images[$value['id']] = $value['attributes']['url'];
}
// then loop through first array and populate it with image urls based on the ID

Related

Adobe insights api not giving data for few metrics

When I run reports in adobe experience cloud for few metrics with page dimension, all metrics are coming correctly, but when I am trying to pull same data via api, few revenue metrics(e.g carts,orders,cartadditions,productinstances) are coming as zero.
I am using curl request to fetch data with access token generated from JWT (Service Account) Authentication.
Here is the my array for post request -
Array
(
[rsid] => XXX
[dimension] => variables/page
[globalFilters] => Array
(
[0] => Array
(
[type] => dateRange
[dateRange] => 2022-04-01T00:00:00.000/2022-04-02T00:00:00.000
)
)
[metricContainer] => Array
(
[metrics] => Array
(
[0] => Array
(
[id] => metrics/pageviews
)
[1] => Array
(
[id] => metrics/visitors
)
[2] => Array
(
[id] => metrics/exits
)
[3] => Array
(
[id] => metrics/bounces
)
[4] => Array
(
[id] => metrics/entries
)
[5] => Array
(
[id] => metrics/carts
)
[6] => Array
(
[id] => metrics/orders
)
[7] => Array
(
[id] => metrics/cartadditions
)
[8] => Array
(
[id] => metrics/productinstances
)
)
[metricFilters] => Array
(
)
)
[settings] => Array
(
[metricSort] => desc
[limit] => 5000
[page] => 0
[countRepeatInstances] => 1
)
)
when I try to fetch almost the same metrics but on daterange dimension then they are coming fine.
Array
(
[rsid] => XXX
[dimension] => variables/daterangeday
[globalFilters] => Array
(
[0] => Array
(
[type] => dateRange
[dateRange] => 2022-04-01T00:00:00.000/2022-04-02T00:00:00.000
)
)
[metricContainer] => Array
(
[metrics] => Array
(
[0] => Array
(
[id] => metrics/visitors
)
[1] => Array
(
[id] => metrics/bounces
)
[2] => Array
(
[id] => metrics/entries
)
[3] => Array
(
[id] => metrics/carts
)
[4] => Array
(
[id] => metrics/orders
)
[5] => Array
(
[id] => metrics/cartadditions
)
[6] => Array
(
[id] => metrics/productinstances
)
)
[metricFilters] => Array
(
)
)
[settings] => Array
(
[metricSort] => desc
[limit] => 5000
[page] => 0
[countRepeatInstances] => 1
)
)
I am new to Adobe and have very limited access to Adobe experience cloud. What could be the issue.

Get Values From Array extracted from cURL

I have following url.
$url="https://graph.facebook.com/v2.8/page_id?fields=albums%7Bphotos.fields(source)%7D&access_token=access_token";
and getting data like this.
$ch=curl_init();
CURL_SETOPT($ch,CURLOPT_URL,$url);
CURL_SETOPT($ch,CURLOPT_RETURNTRANSFER, 1);
$json=json_decode(curl_exec($ch),true);
when I print the data it looks like below.
Array
(
[albums] => Array
(
[data] => Array
(
[0] => Array
(
[photos] => Array
(
[data] => Array
(
[0] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/15622392_1822020618075402_5390943482972338844_n.png?oh=e51cddbae2c4f9ca6926487207349674&oe=58F32530
[id] => 1822020618075402
)
[1] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/14695531_1788596578084473_7400591108780706934_n.jpg?oh=08e6f8301fd574edab84724005b5dcbd&oe=58DBBEB5
[id] => 1788596578084473
)
[2] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/14729405_1787260094884788_470106074060850845_n.jpg?oh=a9cae794a571078709ddede6a0a25fb7&oe=58ECA3E5
[id] => 1787260094884788
)
[3] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/14088463_1761208347489963_7246779259418379868_n.jpg?oh=3b86b61bd6eed58068d1ff55776fa5de&oe=58F47DEA
[id] => 1761208347489963
)
[4] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t31.0-8/s720x720/14125030_1758545434422921_4678448833207945291_o.jpg?oh=0b7f1455568f2ea36c80824c4531d820&oe=58FA25E0
[id] => 1758545434422921
)
[5] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/14067692_1755506721393459_3688009157574505621_n.jpg?oh=3fdf992a10562e7a62222424bbd7d284&oe=58DA3F4A
[id] => 1755506721393459
)
[6] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/13882196_1747456648865133_5440996625655127273_n.jpg?oh=b0f40cfee6858cd45f62e55630f2ac74&oe=58EF172F
[id] => 1747456648865133
)
[7] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/13782279_1745152582428873_8951006239758371779_n.jpg?oh=d329a7d4dd75975302708a147cf3f0e9&oe=58F14A03
[id] => 1745152582428873
)
[8] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/13659216_1740388646238600_1705878934725863431_n.jpg?oh=1ed9492d4ae713587a96edf4f38893b1&oe=58DB8EE7
[id] => 1740388646238600
)
[9] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/10885434_1516104578667009_8707702519302744521_n.jpg?oh=515cce8abab01bcdca68f14388664ae5&oe=58E0AEEB
[id] => 1516104578667009
)
[10] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/1937451_1505417943069006_8760716891932748781_n.jpg?oh=7a2a2daef9b1be7d3c98b35748893ea6&oe=58DCA006
[id] => 1505417943069006
)
[11] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-0/p180x540/10696291_1494026260874841_6924391974289072931_n.jpg?oh=df5d849e389d80c69c82118066445aa1&oe=58E08143
[id] => 1494026260874841
)
[12] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/10171825_1493583504252450_5141485588957894327_n.jpg?oh=17b0b20487ebb34be29621c355dba628&oe=58F0739D
[id] => 1493583504252450
)
[13] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/1513735_1492709627673171_1477328081447762519_n.jpg?oh=3012a617a0d48c4c736fc1e1ee428b26&oe=58EEAE38
[id] => 1492709627673171
)
[14] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/1515003_1490905571186910_3127181473382908591_n.png?oh=83bcf6d52c83ecc05d40b478afe71cd9&oe=58F6D6B2
[id] => 1490905571186910
)
[15] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/970678_1488554404755360_7889648772961232584_n.jpg?oh=3447943aeb630d6cfee3961e9bf8a444&oe=58E08CFE
[id] => 1488554404755360
)
[16] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/10676246_1487619861515481_8080018536585231766_n.jpg?oh=c8e143320188e22170c1f28fa52fcfae&oe=58E6C546
[id] => 1487619861515481
)
[17] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/q82/s720x720/10689897_1486654284945372_4989681801007970605_n.jpg?oh=d67a02472ce4aff6c32d443377a21e9a&oe=58E73B16
[id] => 1486654284945372
)
[18] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t31.0-0/p180x540/10750146_1485256888418445_36234076640555733_o.jpg?oh=5e486c35cee8f4ecba8743948e6e4cb3&oe=58F9C0CE
[id] => 1485256888418445
)
[19] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/560161_1484719421805525_2089957304428778741_n.jpg?oh=099d53b6aacfaa10b7a119c48179c1c3&oe=58E21E6C
[id] => 1484719421805525
)
[20] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/1377050_1484034435207357_151327894676844014_n.jpg?oh=83eb8c6b25412b067b4a000fa5f97a99&oe=58F7DB51
[id] => 1484034435207357
)
)
[paging] => Array
(
[cursors] => Array
(
[before] => MTgyMjAyMDYxODA3NTQwMgZDZD
[after] => MTQ4NDAzNDQzNTIwNzM1NwZDZD
)
)
)
[id] => 1484035021873965
)
[1] => Array
(
[photos] => Array
(
[data] => Array
(
[0] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/13782058_1742422396035225_5477589171813279082_n.png?oh=364dda35704379d15336ab1f9144659d&oe=58EA49E7
[id] => 1742422396035225
)
[1] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/10350506_1484031238541010_5203658133196952315_n.jpg?oh=26dbeba4df1f650e4acbea3a1aad5164&oe=58EC962B
[id] => 1484031238541010
)
)
[paging] => Array
(
[cursors] => Array
(
[before] => MTc0MjQyMjM5NjAzNTIyNQZDZD
[after] => MTQ4NDAzMTIzODU0MTAxMAZDZD
)
)
)
[id] => 1484031228541011
)
[2] => Array
(
[photos] => Array
(
[data] => Array
(
[0] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/13669028_1742420099368788_169584588534858741_n.jpg?oh=2ceec7f3f1890dfff93dfd097d9da11b&oe=58E9A3B8
[id] => 1742420099368788
)
[1] => Array
(
[source] => https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/10687154_1481995178744616_1243763385874632903_n.jpg?oh=0ed79383008455b3326d174dd5935b4b&oe=58FBB705
[id] => 1481995178744616
)
)
[paging] => Array
(
[cursors] => Array
(
[before] => MTc0MjQyMDA5OTM2ODc4OAZDZD
[after] => MTQ4MTk5NTE3ODc0NDYxNgZDZD
)
)
)
[id] => 1481995338744600
)
)
[paging] => Array
(
[cursors] => Array
(
[before] => MTQ4NDAzNTAyMTg3Mzk2NQZDZD
[after] => MTQ4MTk5NTMzODc0NDYwMAZDZD
)
)
)
[id] => page_id
)
Now i want source from array and put this into an image tag. like below.
<img src="url_from the array for each picture"/>
I am trying like this, but not getting source.
foreach($json as $key){
echo $key['source'];
}
How can i get source in loop and display all images?
Change your json_encode line to this: $json=json_decode(curl_exec($ch));
Then access your info as such:
foreach($json->albums->data as $album){
foreach($album->photos->data as $photo){
echo '<img src="'.$photo->source.'"/>';
}
}
You need to loop the albums, and then the photos in these albums, something like:
$albums = $json["albums"];
foreach ($albums["data"] as $album) {
foreach($album["photos"]["data"] as $photo) {
echo $photo["source"];
}
}
This is a multi dimensional array.
Its returning all the albums and the photos within.
Use the following to loop through and display all the images..
// for each Album
foreach($json['albums']['data'] as $album)
{
// for each photos in current album
foreach($album['photos']['data'] as $photo )
{
echo '<img src="'. $photo['source'] .'"/>';
}
}

how to get values a long array with size zero

I have following array from google api and wanted to get id only. How do i get id's from following. when i try to get size it gives me size zero.
Google_Service_Drive_FileList Object ( [collection_key:protected] => items
[internal_gapi_mappings:protected] => Array ( ) [etag] => [itemsType:protected]
=> Google_Service_Drive_DriveFile [itemsDataType:protected] => array [kind] =>
[nextLink] => [nextPageToken] => [selfLink] => [modelData:protected] => Array (
[items] => Array ( [0] => Array ( [id] => 0B0OnHwH_cQckeWZPdXFyRU5aMGs ) [1] =>
Array ( [id] => 0B0OnHwH_cQckaUVORkZaM2NoRXM ) [2] => Array ( [id] =>
1kCQLhEgzgeKO-L57ISWjQL4ctkxT4Gq2wrdzDFbrcac ) [3] => Array ( [id] =>
0B0OnHwH_cQckc3RhcnRlcl9maWxl ) [4] => Array ( [id] => 1-Yhs92vZnvUNArwAcZJZ9xa-
fXZ7ZgRrADyF-ikG1gU ) ) ) [processed:protected] => Array ( ) ) Array ( )
if you mean the object attributes, you can do
$values = array();
$keys = array();
foreach($object as $key=>$value)
{
array_push($keys,$key);
array_push($values,$value);
}
This will give you each object attribute and its corresponding value

Read complex array from php

I get this array in response from webservice, so How do I read it in a foreach cycle? or some easy way to read it. The [group] they are more than 12 [id]
there is.
Array
( [response] => Array (
[single] => Array ( [parameters] => Array ( [0] => Array ( [name] => msgCode [value] => 0101 )
[1] => Array ( [name] => msgDesc [value] => OK )
[2] => Array ( [name] => status [value] => 1)
[3] => Array ( [name] => message [value] => Normal) ) )
[group] => Array ( [id] => N4BD767 [parameters] => Array ( [0] => Array ( [name] => idFee [value] => 000 ) echo
[1] => Array ( [name] => typeFee [value] => Cuota)
[2] => Array ( [name] => entryDate [value] => 2014-12-17T14:06:47-03:00 )
[3] => Array ( [name] => expirationDate [value] => 2015-12-05T00:00:00-03:00)
[4] => Array ( [name] => amountOrigin [value] => 221980)
[5] => Array ( [name] => surcharges [value] => 1856)
[6] => Array ( [name] => entity [value] => ONLINE)
[7] => Array ( [name] => feeStatus [value] => inicial )
[8] => Array ( [name] => tranNumber [value] => 27) ) ) ) )
Okay guys, this is what I did and it work fine. With no foreach.
$output = array();
array_walk_recursive($result, function($item,$key) use (&$output){
array_push($output,$key,$item);
});
echo var_dump($output);

How to create an array based upon two value of an array?

I have an array with multiple keys,
Array
(
[0] => stdClass Object
(
[type] => ab_micro_list
[title] => Testing List
[user_id] => 70318
[micro_list_id] => 390
)
[1] => stdClass Object
(
[type] => ab_micro_list
[title] => Testing List
[user_id] => 70319
[micro_list_id] => 390
)
)
based upon this array I need to create array like this
Array
(
['Testing List'] => Array
(
['users'] => Array
(
[0] => 70318
[1] => 70319
)
)
)
Is there any way to achieve this. If someone has any suggestions, Please share.
Try this.
$arr = array
(
[0] => stdClass Object
(
[type] => ab_micro_list
[title] => Testing List
[user_id] => 70318
[micro_list_id] => 390
)
[1] => stdClass Object
(
[type] => ab_micro_list
[title] => Testing List
[user_id] => 70319
[micro_list_id] => 390
)
);
$finalArr = array();
foreach($arr as $key=>$value){
$finalArr[$value->title]['users'][] = $value->user_id;
}

Categories