Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 - Fatal编程技术网

Php 分组关联数组

Php 分组关联数组,php,arrays,Php,Arrays,我希望能够将关联数组与其`键分组。到目前为止,我不知道该使用什么语法 到现在为止,我有这样的代码 $associativeArray = array("Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow"); groupByColor($associativeArray); function groupByColor($groupedArray) { return $groupedArray; } 我

我希望能够将关联数组与其`键分组。到目前为止,我不知道该使用什么语法

到现在为止,我有这样的代码

$associativeArray = array("Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow");
groupByColor($associativeArray);

function groupByColor($groupedArray)
{
  return $groupedArray;
}
我的目标是在分组时返回数组,理想的结果如下

[黄色=>[成熟芒果、柠檬],红色=>[草莓]]

有关于使用什么方法的提示吗?

函数内部的操作


您可以通过处理每个键并将值转换为键,检查是否存在,然后附加到该键,或者创建它来实现这一点

function groupByColor ($groupedArray) {
  $result = array();
  foreach ($groupedArray as $key=>$val) {
    if (array_key_exists($val, $result)) {
      $result[$val][] = $key;
    } else {
      $result[$val] = array();
    }
  }
  return $result;
}
foreach遍历数组,并将颜色添加到新数组中作为键:

<?php
$associativeArray = array("Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow");
$new = groupByColor($associativeArray);
var_dump($new);

function groupByColor($groupedArray)
{
    foreach ( $groupedArray as $key => $color ) {
        $tmp[$color][] = $key;
    }
    return $tmp;
}
您可以使用函数指定数组的每个值:

<?php
$array = ["Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow"];
$result = [];
array_walk($array, function ($value, $key) use (&$result) {
    $result[$value][] = $key;
});

print_r($result);

我知道怎么做的唯一方法就是循环

<!DOCTYPE html>
<html>
<body>

<?php
$associativeArray = array("Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow");

$data = groupByColor($associativeArray);
print_r($data);

function groupByColor($groupedArray)
{
    foreach ($groupedArray as $key => $value) {
        $final[$value][] = $key;
     } 

    return $final;
}
?>

</body>
</html>

您可以使用foreach遍历数组,并将颜色添加到一个新数组中。最简单的方法是使用foreach遍历输入数组,然后迭代生成所需的输出数组。如果不使用该函数,该方法可以正常工作!谢谢但是如果我把它放在一个函数上,为什么它不工作呢?谢谢!我想我在传递数组时遇到了问题,但可能不是p@JanArielSanJose很高兴帮助您::
<?php
$array = ["Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow"];
$result = [];
array_walk($array, function ($value, $key) use (&$result) {
    $result[$value][] = $key;
});

print_r($result);
<!DOCTYPE html>
<html>
<body>

<?php
$associativeArray = array("Ripe Mango"=>"Yellow", "Strawberry"=>"Red", "Lemon"=>"Yellow");

$data = groupByColor($associativeArray);
print_r($data);

function groupByColor($groupedArray)
{
    foreach ($groupedArray as $key => $value) {
        $final[$value][] = $key;
     } 

    return $final;
}
?>

</body>
</html>