【问题标题】:PHP Advanced Array looping concept for comparision [duplicate]用于比较的 PHP 高级数组循环概念 [重复]
【发布时间】:2015-09-08 09:36:43
【问题描述】:

我有一个类似下面的数组...

array(2) {
  ["gender"]=>
   array(2) {
    [1]=>
    string(4) "Male"
    [2]=>
    string(6) "Female"
  }
  ["agegroup"]=>
  array(3) {
    [3]=>
    string(7) "18 - 24"
    [4]=>
    string(7) "25 - 40"
    [5]=>
    string(7) "40 - 65"
  }
}

这个数组是动态的。就像“性别”和“年龄组”一样,可以有任意数量的项目。所有这些项目都是子数组(关联)。我想在 php 中编写一个循环,该循环从第一个数组元素循环到其他数组元素中的每个元素。

In the above example... the following output should come...
Male- 18-24
Male- 25-40
Male- 40-65

FeMale- 18-24
FeMale- 25-40
FeMale- 40-65

如果数组如下...

array(2) {
  ["location"]=>
   array(2) {
    [A]=>
    string(4) "New York"
    [B]=>
    string(6) "London"
  }
  ["gender"]=>
   array(2) {
    [1]=>
    string(4) "Male"
    [2]=>
    string(6) "Female"
  }
  ["agegroup"]=>
  array(3) {
    [3]=>
    string(7) "18 - 24"
    [4]=>
    string(7) "25 - 40"
    [5]=>
    string(7) "40 - 65"
  }
}

那么...输出应该是...

New York- Male- 18-24
New York- Male- 25-40
New York- Male- 40-65

New York- FeMale- 18-24
New York- FeMale- 25-40
New York- FeMale- 40-65

London- Male- 18-24
London- Male- 25-40
London- Male- 40-65

London- FeMale- 18-24
London- FeMale- 25-40
London- FeMale- 40-65

如果定义了数组长度,我将能够使用foreach() 来编写sn-p。但是父数组和子数组的数组长度都是动态的......有人可以给我提示如何循环它以获得所需的输出吗?

【问题讨论】:

  • 您要查找的关键字是“笛卡尔积”,随着时间的推移,已经有lotsandlotsquestions 提出同样的要求。
  • @salathe 真的,重复。但是那里的解决方案太复杂了:)

标签: php arrays


【解决方案1】:
function make ($arr, $pref = '') {            // pref - saving path to this point
 foreach (array_shift($arr) as $item)         // take the 1st item of array and remove it
   if($arr) make($arr,$pref . $item ." - ");  // Call with sub-tree, add item to path
   else echo $pref . $item ."\n";             // Empty array - we are at leaf
}

make($arr);

对于第二种情况的结果:

New York - Male - 18 - 24
New York - Male - 25 - 40
New York - Male - 40 - 65
New York - Female - 18 - 24
New York - Female - 25 - 40
New York - Female - 40 - 65
London - Male - 18 - 24
London - Male - 25 - 40
London - Male - 40 - 65
London - Female - 18 - 24
London - Female - 25 - 40
London - Female - 40 - 65

【讨论】:

  • OP 几乎看不懂循环,所以你给他们递归?
  • 总有一天他必须了解递归,为什么不是现在?
  • 他写了关卡的不同数量
  • @Viral 因为大多数人在跑步之前先学会走路。 Plus 迭代几乎总是比递归快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多