Probleem met mergen twee arrays
Ik zit met een probleem wat ik niet opgelost krijg: op een website laad ik facebook posts via hun api, nou hebben sommige posts ook een video, die wil ik graag binnen een iframe plaatsen in een post. Alleen de videos en de posts zitten beide in een ander object.
Ik zal een voorbeeld geven:
Een deel van het posts object ziet er zo uit (hier is via de api geen video informatie in te plaatsen):
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
{
"data": [
{
"created_time": "2017-09-12T20:58:21+0000",
"message": "Vandaag bij Vivienne Westwood Boutique Amsterdam de lichtreclame gemonteerd. Mooi project om te mogen doen.\n\u2705 maatwerk\n\u2705 kwaliteit\n\u2705 betaalbaar\n\ud83d\udc4b Benieuwd naar de kosten? We helpen je graag!\n- Reclame & Internet - #ontwerp > #productie > #montage",
"id": "367712570004555_1287302444712225"
},
"data": [
{
"created_time": "2017-09-12T20:58:21+0000",
"message": "Vandaag bij Vivienne Westwood Boutique Amsterdam de lichtreclame gemonteerd. Mooi project om te mogen doen.\n\u2705 maatwerk\n\u2705 kwaliteit\n\u2705 betaalbaar\n\ud83d\udc4b Benieuwd naar de kosten? We helpen je graag!\n- Reclame & Internet - #ontwerp > #productie > #montage",
"id": "367712570004555_1287302444712225"
},
En los daarvan heb je het videos object, wat alle videos van een pagina ophaalt, die ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
{
"data": [
{
"embed_html": "\u003Ciframe src=\"https://www.facebook.com/plugins/video.php?href=https\u00253A\u00252F\u00252Fwww.facebook.com\u00252Fwebsite\u00252Fvideos\u00252F1287302444712225\u00252F&width=1280\" width=\"1280\" height=\"720\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\">\u003C/iframe>",
"permalink_url": "/website/videos/1287302444712225/",
"id": "1287302444712225"
},
"data": [
{
"embed_html": "\u003Ciframe src=\"https://www.facebook.com/plugins/video.php?href=https\u00253A\u00252F\u00252Fwww.facebook.com\u00252Fwebsite\u00252Fvideos\u00252F1287302444712225\u00252F&width=1280\" width=\"1280\" height=\"720\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\">\u003C/iframe>",
"permalink_url": "/website/videos/1287302444712225/",
"id": "1287302444712225"
},
Ik wil graag al deze informatie in 1 loop gebruiken alleen staan ze dus in 2 objecten (json objecten). Mijn idee was om de twee objecten te combineren met array_merge op de volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$json_object = file_get_contents("https://graph.facebook.com/v2.10/paginaid/posts?fields=full_picture,message,picture,story,permalink_url,updated_time,from&access_token=mijnaccesstoken");
$feedarray = json_decode($json_object);
$json_objectvideo = file_get_contents("https://graph.facebook.com/v2.10/paginaid/videos?fields=embed_html,permalink_url&access_token=mijnaccesstoken");
$feedvideo = json_decode($json_objectvideo);
$merged = array_merge($feedarray->data, $feedvideo->data);
?>
$json_object = file_get_contents("https://graph.facebook.com/v2.10/paginaid/posts?fields=full_picture,message,picture,story,permalink_url,updated_time,from&access_token=mijnaccesstoken");
$feedarray = json_decode($json_object);
$json_objectvideo = file_get_contents("https://graph.facebook.com/v2.10/paginaid/videos?fields=embed_html,permalink_url&access_token=mijnaccesstoken");
$feedvideo = json_decode($json_objectvideo);
$merged = array_merge($feedarray->data, $feedvideo->data);
?>
Wanneer ik $merged print krijg ik beide objecten in 1 grote array, met eerst alle posts en daarna alle videos. Nu is mijn vraag: hoe kan ik de juiste video bij de juiste post krijgen? Mij viel op dat ze op een bepaalde manier aan elkaar zijn verbonden, het id van een post is bijvoorbeeld 367712570004555_1287302444712225 en het id van een video is 1287302444712225 als ik dus het id van de post explode op de underscore en het 2e deel pak heb zijn beide ids gelijk.
Hoe kan ik binnen 1 loop bijvoorbeeld $merged['message'] en $merged['embed_html'] gebruiken en dat hij dan de juiste embed link plaatst bij de juiste message.
Als een eventuele video zo duidelijk verbonden is met een post, dan lijkt mij het logisch dat je die onder $merged['message'] hangt als $merged['message']['video'] bijvoorbeeld. 'Mergen' is eigenlijk ook niet helemaal het juiste vertrekpunt: je wilt hier appels en peren juist niet tot één grote moes mergen, omdat je precies wilt zien óf er een video is en, zo ja, wáár die video dan bij hoort.
Ward van der Put op 21/09/2017 11:37:39:
Als een eventuele video zo duidelijk verbonden is met een post, dan lijkt mij het logisch dat je die onder $merged['message'] hangt als $merged['message']['video'] bijvoorbeeld. 'Mergen' is eigenlijk ook niet helemaal het juiste vertrekpunt: je wilt hier appels en peren juist niet tot één grote moes mergen, omdat je precies wilt zien óf er een video is en, zo ja, wáár die video dan bij hoort.
Oke ik snap wat je bedoelt maar hoe zou jij dit dan aanpakken? Hiervoor heb ik beide objecten apart opgehaald en binnen de loop van mijn posts loopte ik de videos, dit gaf alleen als resultaat dat alle videos per post geloopt werden, het lukte me ook niet beide ids te vergelijken op die manier omdat ik dan het post id vergelijk met alle geloopte video ids.