PHP foreach循环重复条目

PHP foreach循环重复条目,php,arrays,foreach,associative-array,Php,Arrays,Foreach,Associative Array,我需要帮助,以便在PHPforeach循环期间操作多维数组。我有以下数组: $sports = [ [ "id" => "soccer", "name" => "Football", "categories" => [ [ "id" => "s1", "name" => "category 1",

我需要帮助,以便在PHP
foreach
循环期间操作多维数组。我有以下数组:

$sports = [
    [
        "id" => "soccer",
        "name" => "Football",
        "categories" => [
            [
                "id" => "s1",
                "name" => "category 1",
                "sportID" => "soccer"
            ],
            [
                "id" => "s2",
                "name" => "category 2",
                "sportID" => "soccer" 
            ],
        ],
        "img" => "/test.png"
    ],
    [
        "id" => "tennis",
        "name" => "Tennis",
        "categories" => [
            [
                "id" => "t1",
                "name" => "category 1",
                "sportID" => "tennis"
            ],
            [   "id" => "t2",
                "name" => "category 2",
                "sportID" => "tennis"
            ],
        ],
        "img" => "/test.png"
    ],
];
我有下面的
foreach
,以便对每项运动进行相应类别的所有运动

foreach($sports as $s){
    $categories = $s['categories'];

    foreach($categories as $c){
        $cats[] = [
            "id" => $c['id'],
            "name" => $c['name'],
            "sportID" => $s['id'],
        ];
    }

    $allCategories[] = $cats;

    $data[] = [
        "id" => $s['id'],
        "name" => $s['name'],
        "categories" => $cats,
        "img" => $s['img'],
    ];

    $output[] = $data;
}
但产出并不是我所期望的;相反,我得到了重复的结果,如下所示:

array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(4) {
      ["id"]=>
      string(8) "soccer"
      ["name"]=>
      string(8) "Football"
      ["categories"]=>
      array(2) {
        [0]=>
        array(3) {
          ["id"]=>
          string(2) "s1"
          ["name"]=>
          string(10) "category 1"
          ["sportID"]=>
          string(8) "soccer"
        }
        [1]=>
        array(3) {
          ["id"]=>
          string(2) "s2"
          ["name"]=>
          string(10) "category 2"
          ["sportID"]=>
          string(8) "soccer"
        }
      }
      ["img"]=>
      string(9) "/test.png"
    }
  }
  [1]=>
  array(2) {
    [0]=>
    array(4) {
      ["id"]=>
      string(8) "soccer"
      ["name"]=>
      string(8) "Football"
      ["categories"]=>
      array(2) {
        [0]=>
        array(3) {
          ["id"]=>
          string(2) "s1"
          ["name"]=>
          string(10) "category 1"
          ["sportID"]=>
          string(8) "soccer"
        }
        [1]=>
        array(3) {
          ["id"]=>
          string(2) "s2"
          ["name"]=>
          string(10) "category 2"
          ["sportID"]=>
          string(8) "soccer"
        }
      }
      ["img"]=>
      string(9) "/test.png"
    }
    [1]=>
    array(4) {
      ["id"]=>
      string(10) "tennis"
      ["name"]=>
      string(8) "Tennis"
      ["categories"]=>
      array(4) {
        [0]=>
        array(3) {
          ["id"]=>
          string(2) "s-1"
          ["name"]=>
          string(10) "category 1"
          ["sportID"]=>
          string(8) "soccer"
        }
        [1]=>
        array(3) {
          ["id"]=>
          string(2) "s2"
          ["name"]=>
          string(10) "category 2"
          ["sportID"]=>
          string(8) "soccer"
        }
        [2]=>
        array(3) {
          ["id"]=>
          string(2) "t1"
          ["name"]=>
          string(10) "category 1"
          ["sportID"]=>
          string(10) "tennis"
        }
        [3]=>
        array(3) {
          ["id"]=>
          string(2) "t2"
          ["name"]=>
          string(10) "category 2"
          ["sportID"]=>
          string(10) "tennis"
        }
      }
      ["img"]=>
      string(9) "/test.png"
    }
  }
}
可以想象,这不是正确的输出,在网球的类别中,你也可以看到足球的类别。
如何更正我的
foreach
循环以获得正确的输出?

您忘记重置
$cats
$data
数组

<?php

$sports = [
    [
    "id" => "soccer",
    "name" => "Football",
    "categories" => [
        [
            "id" => "s1",
            "name" => "category 1",
            "sportID" => "soccer"
        ],
        [
            "id" => "s2",
            "name" => "category 2",
            "sportID" => "soccer" 
        ],
    ],


    "img" => "/test.png"
    ],
    [
    "id" => "tennis",
    "name" => "Tennis",
    "categories" => [
        [
            "id" => "t1",
            "name" => "category 1",
            "sportID" => "tennis"
        ],
        [   "id" => "t2",
            "name" => "category 2",
            "sportID" => "tennis"
        ],

    ],

    "img" => "/test.png"
    ],

    ];

foreach($sports as $s){
    $categories = $s['categories'];

    # before inner loop we need to reset both arrays
    $cats = [];
    $data = [];

    foreach($categories as $c){
        $cats[] = [
                "id" => $c['id'],
                "name" => $c['name'],
                "sportID" => $s['id'],
            ];
    }

    $allCategories[] = $cats;


    $data[] = [
        "id" => $s['id'],
        "name" => $s['name'],
        "categories" => $cats,
        "img" => $s['img'],
        ];

        $output[] = $data;

}

echo '<PRE>';
print_r($output);

您忘记重置
$cats
$data
数组

<?php

$sports = [
    [
    "id" => "soccer",
    "name" => "Football",
    "categories" => [
        [
            "id" => "s1",
            "name" => "category 1",
            "sportID" => "soccer"
        ],
        [
            "id" => "s2",
            "name" => "category 2",
            "sportID" => "soccer" 
        ],
    ],


    "img" => "/test.png"
    ],
    [
    "id" => "tennis",
    "name" => "Tennis",
    "categories" => [
        [
            "id" => "t1",
            "name" => "category 1",
            "sportID" => "tennis"
        ],
        [   "id" => "t2",
            "name" => "category 2",
            "sportID" => "tennis"
        ],

    ],

    "img" => "/test.png"
    ],

    ];

foreach($sports as $s){
    $categories = $s['categories'];

    # before inner loop we need to reset both arrays
    $cats = [];
    $data = [];

    foreach($categories as $c){
        $cats[] = [
                "id" => $c['id'],
                "name" => $c['name'],
                "sportID" => $s['id'],
            ];
    }

    $allCategories[] = $cats;


    $data[] = [
        "id" => $s['id'],
        "name" => $s['name'],
        "categories" => $cats,
        "img" => $s['img'],
        ];

        $output[] = $data;

}

echo '<PRE>';
print_r($output);

您的预期输出是什么?您没有在每个运动循环上重置
$cats
。我需要具有与示例数组相同的输出,即运动数组,并且仅在该特定运动的类别内。您是指重置($cats)?我应该在哪里调用它?您的预期输出是什么?您没有在每个运动循环上重置
$cats
。我需要与示例数组具有相同的输出,该数组是一个运动数组,仅在该特定运动的类别内。您指的是重置($cats)?我该把它叫哪里?