Bonjour,
j'espère être au bon endroit.
J'ai un petit problème avec les fonctions récursives que j'ai jamais vraiment comprit.
Je reçois un json que je récup de youtube, mais il peut être modifié comme ces clés et je dois m'assurer d'être prévenu si les clés changent.
J'ai donc fait une "copie"(indiqué original) que je veux le comparer avec le second pour voir si toute les clés sont identique jusqu'a la valeur "text"(sert a rien juste pour avoir quelque chose) et si rien a changer je peux utiliser les données.
Les données pour mon test:
J'ai voulu faire une fonction récursive et boucler:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 // Original: $test['header']['pageHeaderRenderer']['content']['pageHeaderViewModel']['banner']['imageBannerViewModel']['image']['sources'][0]['url'] = 'text'; $test['metadata']['channelMetadataRenderer']['title'] = 'text'; $test['metadata']['channelMetadataRenderer']['description'] = 'text'; $test['metadata']['channelMetadataRenderer']['rssUrl'] = 'text'; $test['metadata']['channelMetadataRenderer']['avatar']['thumbnails'][0]['url'] = 'text'; $test['metadata']['channelMetadataRenderer']['keywords'] = 'text'; $test['metadata']['channelMetadataRenderer']['ownerUrls'] = 'text'; $test['metadata']['channelMetadataRenderer']['channelUrl'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['videoId'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['thumbnail']['thumbnails'][1]['url'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['title']['runs'][0]['text'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['descriptionSnippet']['runs'][0]['text'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['lengthText']['accessibility']['accessibilityData']['label'] = 'text'; $test['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['navigationEndpoint']['commandMetadata']['webCommandMetadata']['url'] = 'text'; // var_dump_($test); // Le json a comparer avec des clés différentes parfois: $test2['header']['pageHeaderRenderer']['content']['pageHeaderViewModel']['banner']['imageBannerViewModel']['image']['sources'][0]['url'] = 'text'; $test2['metadata']['channelMetadataRenderer']['title'] = 'text'; $test2['metadata']['AchannelMetadataRenderer']['description'] = 'text'; $test2['metadata']['channelMetadataRenderer']['rssUrl'] = 'text'; $test2['metadata']['channelMetadataRenderer']['avatar']['thumbnails'][0]['url'] = 'text'; $test2['metadata']['channelMetadataRenderer']['keywords'] = 'text'; $test2['metadata']['channelMetadataRenderer']['ownerUrls'] = 'text'; $test2['metadata']['channelMetadataRenderer']['channelUrl'] = 'text'; $test2['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['videoId'] = 'text'; $test2['Acontents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['thumbnail']['thumbnails'][1]['url'] = 'text'; $test2['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['title']['runs'][0]['text'] = 'text'; $test2['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['descriptionSnippet']['runs'][0]['text'] = 'text'; $test2['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['lengthText']['accessibility']['accessibilityData']['label'] = 'text'; $test2['contents']['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['richGridRenderer']['contents'][0]['richItemRenderer']['content']['videoRenderer']['navigationEndpoint']['commandMetadata']['webCommandMetadata']['url'] = 'text';
J'arrive a voir quand j'ai une clé différente, mais jarrive pas a arrêter tout le code pour que ma fonction renvoie false a la première clé différente. Quelqu'un aurait une idée comment je peux m'y prendre pour faire cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 function rec($data, $data2) { foreach ($data as $key => $value) { if(is_array($value) AND !empty($data2[$key])) { rec($value, $data2[$key]); } else { if(!empty($data2[$key])) { var_dump_($key); } else { var_dump_("existe pas <==============================="); // On doit tout arrêter si on arrive ici et renvoyer un false pour dire qu'on a un problème return false; } } } return true; }
EDIT:
J'ai réussi on dirait:
Je sais pas si c'est optimisé, mais ça a l'air de fonctionner
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 /* true: aucun problème false: on a un problème */ private function rec($data, $data2, $result = array('error' => true)) { foreach ($data as $key => $value) { if(is_array($value) AND !empty($data2[$key])) { $result = rec($value, $data2[$key], $result); } else { if(!empty($data2[$key])) { // var_dump_($key); } else { // var_dump_("existe pas <==============================="); $result['error'] = false; } } } return $result; }
Partager