@@ -430,33 +430,24 @@ private function metaData(array $data): array
430
430
* [9] => ['/private', 'get', 'fail'], [10] => ['/private', 'post', 'success'], [11] => ['/private', 'post', 'fail'],
431
431
* [12] => ['/metrics', 'put', 'success'], [13] => ['/metrics', 'put', 'fail'], [14] => ['/metrics', 'get', 'success'],
432
432
* [15] => ['/metrics', 'get', 'fail'], [16] => ['/metrics', 'post', 'success'], [17] => ['/metrics', 'post', 'fail']
433
- * @param array<string> $labelNames
434
433
* @param array<array> $labelValues
435
- * @return array <array>
434
+ * @return \Generator <array>
436
435
*/
437
- private function buildPermutationTree (array $ labelNames , array $ labelValues ): array /** @phpstan-ignore-line */
438
- {
439
- $ treeRowCount = count (array_keys ($ labelNames ));
440
- $ numElements = 1 ;
441
- $ treeInfo = [];
442
- for ($ i = $ treeRowCount - 1 ; $ i >= 0 ; $ i --) {
443
- $ treeInfo [$ i ]['numInRow ' ] = count ($ labelValues [$ i ]);
444
- $ numElements *= $ treeInfo [$ i ]['numInRow ' ];
445
- $ treeInfo [$ i ]['numInTree ' ] = $ numElements ;
446
- }
447
-
448
- $ map = array_fill (0 , $ numElements , []);
449
- for ($ row = 0 ; $ row < $ treeRowCount ; $ row ++) {
450
- $ col = $ i = 0 ;
451
- while ($ i < $ numElements ) {
452
- $ val = $ labelValues [$ row ][$ col ];
453
- $ map [$ i ] = array_merge ($ map [$ i ], array ($ val ));
454
- if (++$ i % ($ treeInfo [$ row ]['numInTree ' ] / $ treeInfo [$ row ]['numInRow ' ]) == 0 ) {
455
- $ col = ++$ col % $ treeInfo [$ row ]['numInRow ' ];
436
+ private function buildPermutationTree (array $ labelValues ): \Generator /** @phpstan-ignore-line */
437
+ {
438
+ if (count ($ labelValues ) > 0 ) {
439
+ $ lastIndex = array_key_last ($ labelValues );
440
+ $ currentValue = array_pop ($ labelValues );
441
+ if ($ currentValue != null ) {
442
+ foreach ($ this ->buildPermutationTree ($ labelValues ) as $ prefix ) {
443
+ foreach ($ currentValue as $ value ) {
444
+ yield $ prefix + [$ lastIndex => $ value ];
445
+ }
456
446
}
457
447
}
448
+ } else {
449
+ yield [];
458
450
}
459
- return $ map ;
460
451
}
461
452
462
453
/**
@@ -557,10 +548,9 @@ private function getValues(string $type, array $metaData): array /** @phpstan-ig
557
548
if (isset ($ metaData ['buckets ' ])) {
558
549
$ metaData ['buckets ' ][] = 'sum ' ;
559
550
$ labels [] = $ metaData ['buckets ' ];
560
- $ metaData ['labelNames ' ][] = '__histogram_buckets ' ;
561
551
}
562
552
563
- $ labelValuesList = $ this ->buildPermutationTree ($ metaData [ ' labelNames ' ], $ labels );
553
+ $ labelValuesList = $ this ->buildPermutationTree ($ labels );
564
554
unset($ labels );
565
555
$ histogramBucket = '' ;
566
556
foreach ($ labelValuesList as $ labelValues ) {
0 commit comments