2012-06-05 20 views
0

我有一个数组:PHP - 取决于值结构多维数组

$initialarray = array(
    0 = array(
    'unit' => 1, 
    'class' => 1, 
    'value' => 'string1' 
), 
    1 = array(
    'unit' => 1, 
    'class' => 2, 
    'value' => 'string2' 
), 
    2 = array(
    'unit' => 1, 
    'class' => 2, 
    'value' => 'string3' 
), 
    3 = array(
    'unit' => 2, 
    'class' => 1, 
    'value' => 'string4' 
) 
    4 = array(
    'unit' => 2, 
    'class' => 2, 
    'value' => 'string5' 
) 
); 

什么会是根据第一对“单元”字段的值来构造它(以组所得到的子阵列)的最佳方式,然后根据不同的“类”字段的值,就像这样:

$resultarray = array(
    // array of all the sub-arrays of 'unit' = 1 
    $unit[1] = array(
    // array of all the sub-arrays of 'unit' = 1 and 'class' = 1 
    $class[1] = array(
     0 = array(
     'unit' => 1, 
     'class' => 1, 
     'value' => 'string1' 
    ) 
    ) 
    // array of all the sub-arrays of 'unit' = 1 and 'class' = 2 
    $class[2] = array(
     0 = array(
     'unit' => 1, 
     'class' => 2, 
     'value' => 'string2' 
    ), 
     1 = array(
     'unit' => 1, 
     'class' => 2, 
     'value' => 'string3' 
    ) 
    ) 
) 
    // array of all the sub-arrays of 'unit' = 2 
    $unit[2] = array(
    // array of all the sub-arrays of 'unit' = 2 and 'class' = 1 
    $class[1] = array(
     0 = array(
     'unit' => 2, 
     'class' => 1, 
     'value' => 'string4' 
    ) 
    ) 
    // array of all the sub-arrays of 'unit' = 2 and 'class' = 2 
    $class[2] = array(
     0 = array(
     'unit' => 2, 
     'class' => 2, 
     'value' => 'string5' 
    ) 
    ) 
) 
) 

我曾问过类似的问题here并得到了只有一个迭代工作的答案,即只通过其中的一个字段构建阵列。但是我无法让多个迭代的同一个解决方案工作,即不止一个字段。

另外,是否有一个解决方案来构建一个多维数组取决于两个以上的领域?

+1

难道你不能使用(关系)数据库吗? – Havelock

+1

@Havelock你能更具体吗? –

回答

1

我认为这不是一个问问题的方式。这很简单,你可以通过玩数组,键等来做到这一点......所以首先你应该努力解决这个问题。之后如果你在尝试中途遇到任何问题,那么你可以在这里问问。我已经在这里解决了你的问题是完整的代码,但下次请做一些工作,然后只发布问题。从不要求代码。

foreach ($initialarray as $key1=>$val1) 
{ 
    foreach ($val1 as $key2=>$val2) 
    {    

     if($key2=='unit') 
     { 
      $num=$val2; 
      if($val2!=$num) 
      $testarr['unit'.$val2]=array(); 
     } 
     if($key2=='class') 
     { 
      $testarr['unit'.$num]['class'.$val2][]=$val1; 
     } 

    } 
} 

print_r($testarr); 
+0

非常感谢你,这工作。也许我现在不是提问简单的地方,我将来会更谨慎。我是一个PHP初学者。但是我花了3天的时间试图解决这个问题,只有在失败后才决定在StackOverflow上提出问题。我还在互联网上搜索了很多答案,但无法找到与您的解决方案相近的东西。 –

0

如果我可以用以下方式表达我自己:我只看到问题的前端,对后端一无所知,例如, “数据从哪里来?”,“如何收集和存储”等,所以我的回答可能不是真正的帮助,但我仍然会给我“调皮”。
如果您可以将所有数据存储在关系数据库中(以表格的形式),那么从数据库中选择所需数据而不是重新排列数组会更容易和更快(!),这将需要一些比较多的时间。
就像一个例子,您可以选择(并将其存储到数组中)所有具有unit = '1'的项目和/或具有class = '2'的所有项目。这会让生活更容易IMHO,比将所有数据放在多维数组中,然后尝试对它进行排序/重新排列它。特别是如果你这样做的基础上不止一个财产。

+0

非常感谢您的建议。我自己一直在想这个问题。我正在尝试使用Codeigniter构建自定义CMS。单元和类将被用户插入到数据库中。例如,一个单位可以是一篇博客文章或一个页面,而一个班级是该单位的自定义分类标准 - 一个页面标题,一个页面文本,一个博客标题或一个博客特色图片等等。问题出在那里既不是有限数量的单位也不是类,所以这就是为什么我不能把每个单元或每个类放在一个单独的表中。 –

+0

噢,那么我会建议让SQL完成所有这些工作 - 它更有效(在时间和资源上便宜)。为了这个目的,我看到它,你需要一个用于分类的表,它有两列(属性)'unit'和'class'来表示单元和类之间的关系(因此*关系*数据库),然后将表示在两个单独的表 – Havelock

+0

现在我明白你的意思了。我也在考虑这一点,但我只想看看这两种解决方案中的哪一种会更好。我得到了我的问题的解决方案,但我会A/B测试'两个数据库结构,看看哪一个会变得更优雅。非常感谢您的建议。 –