Php 如何在foreach循环中使用一个变量创建多个数组

Php 如何在foreach循环中使用一个变量创建多个数组,php,arrays,foreach,Php,Arrays,Foreach,每次迭代我的Categories数组时,我想为每个类别创建一个新数组。我的数据来自一个更大的数组。每次循环通过最外层的foreach时,我希望创建一个具有适当$Categories数组值名称的唯一数组。我可能解释得不太清楚,所以如果有什么需要详细说明的,请告诉我。下面是一个代码示例,为了节省空间,我对其进行了简化,但仅省略了本示例不需要的键/值对。这可能不是最有效的方法,因为我强制它在每次为每个类别运行时循环浏览所有菜单项,但稍后我将重点讨论这个问题 //$menuItems['menu\U i

每次迭代我的Categories数组时,我想为每个类别创建一个新数组。我的数据来自一个更大的数组。每次循环通过最外层的foreach时,我希望创建一个具有适当$Categories数组值名称的唯一数组。我可能解释得不太清楚,所以如果有什么需要详细说明的,请告诉我。下面是一个代码示例,为了节省空间,我对其进行了简化,但仅省略了本示例不需要的键/值对。这可能不是最有效的方法,因为我强制它在每次为每个类别运行时循环浏览所有菜单项,但稍后我将重点讨论这个问题

//$menuItems['menu\U items']是从中获取所有信息的主数组的名称

$my_variable\u array\u name是我想用变量创建的数组,这样每次它作为$Category foreach循环通过$Categories时,我都可以用不同的名称创建一个新的数组

$Categories = array('0Cat', '1Cat', '2Cat', '3Cat', '4Cat', '5Cat');
foreach ($Categories as $Category)
{
  foreach($menuItems['menu_items'] as $Curr_Item)
  {
    if($Curr_Item['category']==$Category)
    {    
      $my_variable_array_name[$Category.'_Entry'][$Curr_Item['name']] =
        array('name'=>$Curr_Item['name'],
              'id'=>$Curr_Item['id'],
              'amount'=>$Curr_Item['amount'],
              'on_hold'=>$Curr_Item['on_hold'],
              'category'=>$Curr_Item['category'],
              'Measurement'=>$Curr_Item['Measurement'],);
    }
  }
}
因此,为了总结和解释它不同,我只需要写一次这个chuck,每次它为每个类别条目运行时,它将生成一个新的不同数组,具有唯一名称,是类别值的导数,例如:1Cat等。因此,我将使用6个不同的数组来保存适当的信息


我试图使用$Category作为数组的名称,但出现了错误。如果我给数组起一个名字,代码可以正常工作,但它会在一个数组中编写所有代码,我希望每个类别都包含在一个新数组中。

您的问题听起来很困惑,但我认为您只是在寻找一个可以使用的迭代器

foreach ($categories as $i => $category) {
  // $i starts at 0
} 

你能试试这个吗。我在这里声明了一个临时数组,它包含您在循环中填充的所有数据。循环完成后,我将使用php的内置函数extract打开数组,该数组中的所有项将成为一个单独的变量

所以你以后可以直接使用它们

请尝试使用以字母表开头的类别名称。因为$0Cat会给您带来语法错误

$Categories = array('0Cat', '1Cat', '2Cat', '3Cat', '4Cat', '5Cat');
$arr = array();
foreach ($Categories as $Category)
{
  foreach($menuItems['menu_items'] as $Curr_Item)
  {
    if($Curr_Item['category']==$Category)
    {    
      $tmp = $my_variable_array_name[$Category.'_Entry'][$Curr_Item['name']];
      $arr[$tmp] =
        array('name'=>$Curr_Item['name'],
              'id'=>$Curr_Item['id'],
              'amount'=>$Curr_Item['amount'],
              'on_hold'=>$Curr_Item['on_hold'],
              'category'=>$Curr_Item['category'],
              'Measurement'=>$Curr_Item['Measurement'],);
    }
  }
}
extract($arr);

一个由6个数组组成的数组和6个数组一样好,不是吗我想是的。除此之外,我是否可以仅对嵌套数组进行排序,而不是对整个最外层数组进行排序?此外,我将再次查看我的项目,看看我是否可以以不同的方式使用主阵列,没有必要制作一个包含6个阵列的阵列,因为它已经在主阵列中完成,与我在我的项目中制作的结构不同,但所有信息都是相同的。我仍然想知道如何在我的foreach循环中创建一个不同于变量数组名的新数组。当然,数组元素可以像普通变量一样使用。虽然可以使用带有$$语法的变量变量来实现这一点,但我建议不要这样做,而是使用数组数组,正如杰克所建议的,我不确定我是否需要迭代器。foreach为我迭代。除非我可以使用它来更改$my_变量\u数组\u名称。是否需要将类别数组中的值声明为数组对象?我以为php做到了这一切。我使用了你的代码,我看到了一些在其他领域实现它的方法,但我不确定这是最好的东西,但它可能只是完美的东西,需要更好地掌握它。首先,我无法访问作为变量的键。我试图呼应$name;和echo$arr=>$name;第一个什么也没做,第二个出错了。另外,当我打印\r$arr时,我只得到最后一个类别中的一个项目,所以我想这是一个附加问题,我可能可以找出那个项目。我想为每个类别创建单独的数组的主要原因是,我可以按价格对它们进行排序。我没有包括键/值对,只是因为实际上有分配的项目,它们之间并不真正相关,我们可以按id进行排序,以便在本文中使用。顺便说一句,我在应用程序中使用不同的类别名称,我的客户只是不希望它们公开。感谢您提供的任何见解。我之所以使用$arr方法是因为如果使用$$方法,它会创建一个带有值名称的变量,它将不起作用,并且会出现错误,因为会出现范围问题,因为该变量会在forreach循环的if条件内创建和初始化。我假设$my_variable_array_name[$Category.''u Entry'][$Curr_Item['name']]是唯一的。不是吗?$my_variable_array_名称将是唯一的,因为我希望它来自$Catagories数组。每次foreach移动到下一个类别名称时,我想用当前类别的名称创建一个新的单独数组。最终,我想按价格对类别进行排序,这样当我将它们输出到我的菜单页面时,它们是按价格进行描述的。此外,每个类别在输出页面上都有不同的部分,因此我认为可以更轻松地分别使用它们。我还想知道如何使用摘录创建的变量?我尝试回显$name变量,但是w 因为我做不到。