计算多维数组中一个值与另一个值出现的次数 | PHP

Count how many times a value occurs with another value in a multidimensional array | PHP

所以我有了这个多维数组,我想做的是获取一个值与另一个值出现的次数。

例如:

球、丛林和汽车一起出现2次,球和汽车一起出现3次,球和丛林一起出现3次,球和海一起出现2次....海和丛林一起出现1次。 ...

一个数组可能有 3 个元素,另一个可能有 8 个元素。

有可能完成吗?

 array(5) {
          [0]=>
          array(3) {
            [0]=>
            string(4) "Ball"
            [1]=>
            string(6) "Jungle"
            [2]=>
            string(3) "Sea"
            [3]=>
            string(3) "Fish"

          }
          [1]=>
          array(3) {
            [0]=>
            string(3) "Sea"
            [1]=>
            string(4) "Ball"
            [2]=>
            string(3) "Car"
          }
          [2]=>
          array(3) {
            [0]=>
            string(5) "Jungle"
            [1]=>
            string(4) "Ball"
            [2]=>
            string(3) "Car"
    
          }
       [3]=>
          array(3) {
            [0]=>
            string(5) "Jungle"
            [1]=>
            string(4) "Ball"
            [2]=>
            string(3) "Car"
    
          }
    
         }
$items = [
    [ "Ball", "Jungle", "Sea" ],
    [ "Sea", "Ball", "Car" ],
    [ "Jungle", "Ball", "Car" ],
    [ "Jungle", "Ball", "Car" ]
];

$data = [];

foreach ($items as $item) {

  sort($item);

  // 3
  $data[] = implode('–', $item);
  // 2
  $data[] = implode('–', [ $item[0], $item[1] ]);
  $data[] = implode('–', [ $item[0], $item[2] ]);
  $data[] = implode('–', [ $item[1], $item[2] ]);
  // 1
  $data[] = $item[0];
  $data[] = $item[1];
  $data[] = $item[2];

}

sort($data);

$result = array_count_values($data);

print_r($result);

这将打印:

Array
(
    [Ball] => 4
    [Ball–Car] => 3
    [Ball–Car–Jungle] => 2
    [Ball–Car–Sea] => 1
    [Ball–Jungle] => 3
    [Ball–Jungle–Sea] => 1
    [Ball–Sea] => 2
    [Car] => 3
    [Car–Jungle] => 2
    [Car–Sea] => 1
    [Jungle] => 3
    [Jungle–Sea] => 1
    [Sea] => 2
)
$items = [
    [ "Ball", "Jungle", "Sea" ],
    [ "Sea", "Ball", "Car", "Heaven", "Sky", "Beach", "Thunder", "Cave" ],
    [ "Jungle", "Ball", "Car", "More" ],
    [ "Jungle", "Sky", "Ball", "Car", "Thunder" ]
];

function combinations(array $items): array {
  $result = [ [] ];
  foreach ($items as $item) {
    foreach ($result as $values) {
      $elements = array_merge([ $item ], $values);
      sort($elements);
      $result[] = $elements;
    }
  }
  return $result;
}

function count_combinations(array $items): array {
  $data = [];
  foreach ($items as $item) {
    $data = array_merge($data, combinations($item));
  }
  $data = array_filter($data);
  $data = array_map(fn($value) => implode('–', $value), $data);
  sort($data);
  return array_count_values($data);
}

print_r(count_combinations($items));