2016-11-02 243 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