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

时间:2014-10-15 04:31:26

标签: php arrays foreach

每次迭代Categories数组时,我想为每个类别创建一个新数组。我的数据来自更大的数组。每次循环通过最外层的foreach时,我想创建一个具有相应$Categories数组值名称的唯一数组。我可能没有很好地解释它,所以如果有什么我需要详细说明,请告诉我。这是一个代码示例(我已经简化了它以节省空间,但只省略了这个示例中不需要的键/值对。这可能不是最有效的方法,因为我强制它循环遍历所有菜单每次为每个类别运行的项目,但我将在稍后关注该问题。)

// $menuItems['menu_items'])是我从中获取所有信息的主数组的名称

$my_variable_array_name是我想用变量创建的数组,这样我每次运行($Categories as $Category)foreach循环时都可以创建一个具有不同名称的新数组。

$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,每次运行(对于每个类别条目),它将创建一个具有唯一名称的新(不同)数组(衍生物)类别值ie:"1Cat"等等。)所以我最终会得到6个不同的数组,其中包含相应的信息。

我尝试使用$Category作为数组的名称,但它错了。如果我给数组一个名字,但是它将所有的数组写入,我希望每个类别都在一个新的数组中,代码工作正常。

2 个答案:

答案 0 :(得分:0)

您的问题听起来确实令人困惑,但我认为您只是在寻找可以使用的迭代器。

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

答案 1 :(得分:0)

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

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

P.S尝试使用以字母开头的类别名称。因为$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);