J'ai un tableau appelé Compte d'emploi qui est comme suit Array
([0] => Array([count] => 0[yearmonth] => 2019-6)
[1] => Array([count] => 3[yearmonth] => 2019-7)
[2] => Array([count] => 0[yearmonth] => 2019-8)
[3] => Array([count] => 3[yearmonth] => 2019-9)
[4] => Array([count] => 5[yearmonth] => 2019-10)
)
3 Réponses :
Rechercher efficacement les emplois La recherche doit avoir des clés qui Représenter les données relationnelles ( Utilisation de chaque date rencontrée à partir du tableau CODE> DATES CODE>, Vérifiez si le code: ( Demo ) P> sortie: p> Alternativement, si vous demandez que Un nouveau réseau de sortie doit être déclaré et les compartiments associatifs doivent être dans le même ordre que chez Y Notre question, alors ceci est mon ajustement de la même technique: p> code: ( Démo ) P> $ CODE> Array pour les dates lorsque vous ithetez les dates
$ CODE> Array, créez un tableau "Recherche".
YearMonth code>). p>
YearMonth code> La valeur est représentée sous forme de clé de la recherche - si oui, utilisez la valeur
compteur code>, si non, définissez 0. p>
code> avant une variable signifie "Modifier par référence - de sorte que la matrice d'origine soit mutée au lieu de ne pas avoir besoin de déclarer une nouvelle matrice de sortie. P>
?? code> est l'opérateur" NULL COALESSCINCING ", cela permet. une valeur de secours à utiliser si la variable est
null code> / non déclaré. p>
$lookup = array_column($jobs, null, 'yearmonth');
$result = [];
foreach ($dates as $date) {
$result[] = $lookup[$date['yearmonth']] ?? ['count' => 0] + $date;
}
var_export($result);
Donc, si vous ajoutez compte => 0 code> à la date
$ DATE code> et index sur le
YearMonth code> Vous pouvez indexer
$ job code> sur
d'année code> et fusionner dans
$ DATE CODE>:
$result = array_merge(array_column(array_map(function($v) { $v['count'] = 0; return $v; },
$date), null, 'yearmonth'),
array_column($job, null, 'yearmonth'));
Bien que cela fonctionne, une solution de style fonctionnel, il effectuera 4 itérations de réseau: ( array_map () code>,
array_column () code>,
array_column () code >, alors
array_merge () code>. Ceci est plus cher que la solution que j'ai proposée (qui ne fait que 2 itérations sur des données de tableau). Ce n'est pas une attaque, juste des informations pour expliquer la différence à l'OP et les chercheurs.
Oui, juste pour le plaisir.
Ne jamais sous-estimer la puissance de pouvoir utiliser des touches de manière / de manière très flexible dans des tableaux PHP. sortie du troisième tableau une version plus compressée du code ci-dessus ressemblerait à: p> $ tiers_arr code>: < / p>
@MickMackusa - J'espère que ça va, j'ai volé du code de votre part ;-)
Je ne suis pas offensé mais c'est ma réponse avec la syntaxe ajustée pour être plus verbeuse. Je ne recommande pas ce style d'affectation ternaire - à nouveau, c'est trop verbeux. Je ne sais pas que cette réponse ajoute beaucoup de valeur à la page des chercheurs.
Rappelez-vous simplement que Stack Exchange est un endroit pour éduquer et autonomiser les gens tout en renforçant un référentiel de connaissances toujours à la maturation. Ce n'est pas un site conçu pour donner aux gens des points magiques. Les points ne sont que "bruit" par rapport au "signal" susmentionné. Lorsque vous envisagez de poster, demandez-vous si vous avez quelque chose de nouveau, unique et précieux pour partager avec des chercheurs. Sinon, ne le postez pas. Dans la même veine, ne recommande jamais une solution que vous connaissez est "pire" qu'une autre réponse - même si elle "fonctionne".
Oh je ne dirais pas que c'est ta réponse. J'utilise deux touches de réglage de deux boucles de foreseach et vous mettez des valeurs dans un tableau de recherche Antoher avec des comptes. Je crée également un nouveau tableau Becausue OP, demanda cela et vous modifiez la matrice actuelle. C'est une autre façon de résoudre le même problème oui, mais encore une fois, je ne suis pas d'accord avec vous que c'est votre réponse. Vous avez également les clés de l'ordre incorrect (je ne pense pas que cela compte) mais c'est juste un fait.
Je n'ai aucune idée de ce dont vous parlez de la poche FGITW, mais je n'essaie pas de vous insulter d'une manière. Si je l'ai fait - je m'excuse.
Dans votre première boucle, vous créez une matrice de recherche avec des clés d'une année, tout comme je l'ai fait. Les différences étant que vous déclarez $ clé code> sans raison et vous laissez les compartiments complètes dans TACT. J'aurais pu créer le même tableau avec
Array_Column (€ Jobs, NULL, "YearMonth"); Code> Mais je sais que je n'ai pas besoin des données excédentaires. Ensuite, dans la deuxième boucle, vous vérifiez le tableau de recherche comme vous le souhaitez - tout comme ma réponse démontrée. Sauf que je n'appelle pas
isset () code> et je ne déclare pas et construit un nouveau réseau de sortie. C'est la même réponse écrite différemment. Maintenant, je suis un peu déçu, alors expliquez cela.
Je ne dis pas que vous êtes une affiche FGITW, l'autre utilisateur était.
J'ai effectivement évoqué votre réponse. Maintenant, je commence à regretter cela ;-) Sérieusement, nous ne sommes pas d'accord et c'est comme ça que c'est parfois. Oui, il existe des similitudes, mais les programmes ne produisent même pas de données identiques et, dans mon esprit, je réponds à quoi m'attendent. Je ne dis pas que tu le fais mal, mais je dis que ce n'est pas ce que l'OP indique qu'il / elle veut. Cela ne me dérange pas si vous obtenez une réponse acceptée, mais je pense qu'il est à la hauteur de décider quelle réponse devrait être acceptée.
Just Loop
$ Date code> et vérifier si chaque
YearMonth code> est dans
$ Emploi code> et obtenez le compteur code> ou
0 code> sinon et ajouter à la nouvelle matrice.
Veuillez toujours publier vos données de matrice comme
var_export () code> ou une chaîne JSON_Encoded.
Votre question est une «vidage des exigences». Nous nous attendons toujours à ce que vous recherchiez et essayez quelque chose avant de poster une question sur le débordement de la pile.