基于具有键和值的单维数组的值拆分数组

时间:2016-11-02 10:02:55

标签: php

我试图根据值将数组拆分到不同的数组。 这是我的数组

$myArray=('x'=>'europe','y'=>'europe','a'=>'USA','b'=>'USA','c'=>'Canada');

我想根据下面的值分割数组

$newList[europe]=(x,y);
$newList[USA]=(a,b);
$newLsit[Canada]=(c);

我尝试了以下

foreach($myArray as $key =>$value){
$myList[$value]=$key;
}

foreach($myArray as $key => $value){
echo $key;
if($value=='USA')$myList['USA']=$key;
if($value=='europe')$myList['europe']=$key;
if($value=='Canada')$myList['Canada']=$key;
}

输出相同

 Array ( [europe] => y [USA] => b [Canada] => c )

我不明白这个问题是什么。任何帮助都很受欢迎。

5 个答案:

答案 0 :(得分:2)

你需要使用这个

$myList = array();
foreach($myArray as $key => $value)
{
 if($value=='USA') $myList['USA'][]=$key;
 if($value=='europe') $myList['europe'][]=$key;
 if($value=='Canada') $myList['Canada'][]=$key;
}

答案 1 :(得分:2)

如果你有更多的国家,那么如果循环不是一个好方法。而不是你可以使用foreach语句为每个国家创建数组。请参阅以下代码,它可能会对您有所帮助。

    $myArray = array('x'=>'europe','y'=>'europe','a'=>'USA','b'=>'USA','c'=>'Canada');
    $new_array = array();
    foreach($myArray as $key=>$val)
    {
      $new_array[$val][] = $key;
    }
    print_r($new_array);

答案 2 :(得分:1)

一种简单的方法。

$myArray= array('x'=>'europe','y'=>'europe','a'=>'USA','b'=>'USA','c'=>'Canada');
$grouped = array();
foreach ($myArray as $key => $group) {
    $grouped[$group][] = $key;
}
print_r($grouped);

DEMO http://phpio.net/s/9lw

答案 3 :(得分:0)

array多次无法key次。因此,看起来key被最新值覆盖。您需要以嵌套方式保存数组。

$myArray= array('x'=>'europe','y'=>'europe','a'=>'USA','b'=>'USA','c'=>'Canada');

foreach($myArray as $key => $value) {
  // Value as the key & key in sub array
  $new[$value][] = $key; 
}

var_dump($new);

<强>输出

array(3) {
  ["europe"]=>
  array(2) {
    [0]=>
    string(1) "x"
    [1]=>
    string(1) "y"
  }
  ["USA"]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
  ["Canada"]=>
  array(1) {
    [0]=>
    string(1) "c"
  }
}

答案 4 :(得分:0)

你需要在存在时推送数组并在不存在时分配 - 这将为任何警告而烦恼。使用array_key_exists()函数检查数组中的值是否为键?

$myArray = array('x'=>'europe','y'=>'europe','a'=>'USA','b'=>'USA','c'=>'Canada');
$newList = array();

foreach($myArray as $key => $value){
    if(array_key_exists($value, $newList))
        array_push($newList[$value], $key);
    else    
        $newList[$value][] = $key;
}
print_r($newList);

Online Example