Php 基于值合并数组的键

Php 基于值合并数组的键,php,arrays,array-merge,Php,Arrays,Array Merge,我想根据值合并数组的键。这是我的阵列 Array ( [1] => 1 [2] => 1 [3] => 1 [4] => 2 [5] => 0 [6] => 2 [7] => 2 ) 我希望输出为 Array ( [1,2,3] => 1 [4,6,7] => 2 [5] => 0 ) 我一整天都在绞尽脑汁,但找不到解决办法。任何暗示都将不胜感激 我所尝

我想根据值合并数组的键。这是我的阵列

Array
(
    [1] => 1
    [2] => 1
    [3] => 1
    [4] => 2
    [5] => 0
    [6] => 2
    [7] => 2
)
我希望输出为

Array
(
    [1,2,3] => 1
    [4,6,7] => 2
    [5] => 0
)
我一整天都在绞尽脑汁,但找不到解决办法。任何暗示都将不胜感激

我所尝试的:

for($i=2;$i<=count($new);$i++){
    if ($new[$i-1][1]==$new[$i][1]){
        $same .= $new[$i-1][0].$new[$i][0];
    }
}
echo $same;

对于($i=2;$i您可以循环数组元素并创建具有新结构的新数组。请检查下面的代码,它可能会对您有所帮助

$old_array = array(1=> 1,2 => 1,
3=> 1,
4 => 2,
5 => 0,
6 => 2,
7 => 2
);
$new_array = array();
foreach($old_array as $key => $value)
{
  if(in_array($value,$new_array))
  {
     $key_new = array_search($value, $new_array);//to get the key of element
     unset($new_array[$key_new]); //remove the element
     $key_new = $key_new.','.$key; //updating the key
     $new_array[$key_new] = $value; //inserting new element to the key 
  }
  else
  {
    $new_array[$key] = $value;
  }
}
print_r($new_array);

首先循环原始数组,创建一个临时数组,其中原始值是键,值是作为数组的原始键


然后循环临时数组,创建新数组,其中临时数组的值内爆为键。

没有办法将一个键数组设置为单个值,但另一种方法是:

这将翻转数组,并为旧数组的每个值声明一个数组,然后将具有相同值的键推入每个列表

对于这样的数组:
数组(1=>1,2=>1,3=>1,4=>2,5=>2,6=>2)

结果如下所示:
array(1=>array(1,2,3),2=>array(4,5,6))


希望它能满足您的需要。

请检查这是否有效,但您看到我的数组结构与您的不同。@Alicia您是说双引号吗?
<?php
$old_arr = ["1"=>1,"2"=>1,"3"=>1,"4"=>2,"5"=>0,"6"=>2,"7"=>2];
$tmp = array();
foreach($old_arr as $key=>$value)
{
  if(in_array($value, $tmp)){
      $index = array_search($value, $tmp);
      unset($tmp[$index]);
      $tmp[$index.",".$key] = $value;
  }else{
    $tmp[$key] = $value;
  }
}
ksort($tmp);
echo "<pre>";
print_r($tmp);
echo "</pre>";
?>
$arr = array(1 => 1, 2 => 1, 3 => 1, 4 => 2, 5 => 0, 6 => 2, 7 => 2);
$tmp = array();
foreach ($arr as $key => $val)
    $tmp[$val][] = $key;
$new = array();
foreach ($tmp as $key => $val)
    $new[implode(',', $val)] = $key;
function flipWithKeyArray($arr){
  $result = array();
  foreach($arr as $key => $val){
    if(!isset($result[$val]))
      $result[$val] = array();
    $result[$val][] = $key;
  }
  return $result;
}