2016-11-02 116 views
0

我想根据值将数组拆分为不同的数组。 这是我的数组基于单值数组的键值的值拆分数组

$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) 

我不明白这个问题可能是什么。任何帮助都非常appriciated。

+0

什么是预期的结果数组? –

回答

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

你需要使用这个

$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

一个简单的方法。

$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

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" 
    } 
} 
0

您需要时存在推阵列并分配时不present-这二年即可回收任何警告。使用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