0
votes

Fusionner 2 matrice et dans un troisième nouveau quand une valeur est la même

J'ai un tableau appelé Compte d'emploi qui est comme suit $ Job STRY> =>

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 commentaires

Just Loop $ Date et vérifier si chaque YearMonth est dans $ Emploi et obtenez le compteur ou 0 sinon et ajouter à la nouvelle matrice.


Veuillez toujours publier vos données de matrice comme var_export () 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.


3 Réponses :


2
votes

Rechercher efficacement les emplois $ CODE> Array pour les dates lorsque vous ithetez les dates $ CODE> Array, créez un tableau "Recherche".

La recherche doit avoir des clés qui Représenter les données relationnelles ( YearMonth code>). p>

Utilisation de chaque date rencontrée à partir du tableau CODE> DATES CODE>, Vérifiez si le 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>

code: ( Demo ) P> xxx pré>

sortie: p> xxx pré>


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>

$lookup = array_column($jobs, null, 'yearmonth');

$result = [];
foreach ($dates as $date) {
    $result[] = $lookup[$date['yearmonth']] ?? ['count' => 0] + $date;
}

var_export($result);


0 commentaires

0
votes

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'));


2 commentaires

Bien que cela fonctionne, une solution de style fonctionnel, il effectuera 4 itérations de réseau: ( array_map () , array_column () , array_column () , alors array_merge () . 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.



1
votes

Ne jamais sous-estimer la puissance de pouvoir utiliser des touches de manière / de manière très flexible dans des tableaux PHP. xxx

sortie du troisième tableau $ tiers_arr : < / p> xxx

une version plus compressée du code ci-dessus ressemblerait à: xxx


8 commentaires

@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é 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"); 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 () 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.