Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从二维数组中,如何创建内部数组的组(即数组),这些组对于特定字段具有相同的值?_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 从二维数组中,如何创建内部数组的组(即数组),这些组对于特定字段具有相同的值?

Php 从二维数组中,如何创建内部数组的组(即数组),这些组对于特定字段具有相同的值?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组: fruits = [ 0 => ["color"=>"red", "name"=>"apple"], 1 => ["color"=>"red", "name"=>"tomato"], 2 => ["color"=>"green", "name"=>"kiwi"], 3 => ["color"=>"red", "name"=>"carrot"], 4 => ["color"=>"

我有以下数组:

fruits = [
  0 => ["color"=>"red", "name"=>"apple"],
  1 => ["color"=>"red", "name"=>"tomato"],
  2 => ["color"=>"green", "name"=>"kiwi"],
  3 => ["color"=>"red", "name"=>"carrot"],
  4 => ["color"=>"yellow", "name"=>"banana"],
  5 => ["color"=>"yellow", "name"=>"mango"],
];
我需要把它转换成以下形式:

fruits = [
  0 => [
    0 => ["color"=>"red", "name"=>"apple"],
    1 => ["color"=>"red", "name"=>"tomato"],
    2 => ["color"=>"red", "name"=>"carrot"]
  ], 
  1 => [
    0 => ["color"=>"yellow", "name"=>"banana"],
    1 => ["color"=>"yellow", "name"=>"mango"],
  ],
  2 => [
    0 => ["color"=>"green", "name"=>"kiwi"],
  ]
];
那就是我需要根据水果的颜色来分组


我试过了,但不知怎的,我没能把它弄对

关联数组很简单:

$sortedFruits = array();
for ($i = 0; $i < count($fruits); $i++) {
  if(!$sortedFruits[$fruits[$i]['color']]) { $sortedFruits[$fruits[$i]['color']] = array(); }
  array_push($sortedFruits[$fruits[$i]['color']], $fruits[$i]);
}
print_r($sortedFruits['red']);
$sortedFruits=array();
对于($i=0;$i
如果结果数组过于复杂,我建议将第一级键替换为颜色名称,并在每个颜色名称中使用名称


为您的示例构建一个代码逻辑将是一个非常大的问题,不需要这样做。

一个选项是通过提取名称和颜色以分离平面阵列来循环颜色。
这样,您只需循环唯一颜色的计数(在本例中为三次)。
然后使用数组_intersect进行匹配

$colors = array_column($fruits, "color");
$names = array_column($fruits, "name");
foreach(array_unique($colors) as $color) $new[$color] = array_intersect_key($names, array_intersect($colors, [$color]));

var_dump($new);

您的代码在哪里,或者您试图自己解决问题的代码在哪里?到目前为止你试过什么?请编辑您的问题。