2012-12-26 24 views
2

我寫這似乎是一個共同的任務的功能,我一直在尋找通過PHP文件並不能找到這個功能是否有我想要實現的本機功能?

/** 
* Move certain key/values from an array to a new one 
* @param array $array the original array 
* @param array $keys 
* @return $array 
*/ 
function array_rip(array &$array, array $keys){ 
    $new = array(); 
    foreach($keys as $key){ 
     if(isset($array[$key])){ 
      $new[$key] = $array[$key]; 
      unset($array[$key]); 
     } 
    } 
    return $new; 
} 

是否已有這樣的功能,我只是錯過顯而易見的?

這是行爲

<?php 
$a = array('color'=>'green', 'fruit'=>'apple','item_id'=>33,'owner_id'=>420); 
$b = array_rip($a,array('owner_id','item_id')); 

print_r($a); 
print_r($b); 
?> 

上面的示例將輸出:使用array_combine()

Array 
(
    [color] => green 
    [fruit] => apple 
) 

Array 
(
    [owner_id] => 420 
    [item_id] => 33 
) 
+0

不是我所知道的,但你可以看看文檔,類似這個最接近的東西是http://php.net/manual/en/function.array-combine.php,但是密鑰數量必須相等。 –

回答

0

嘗試。

$array = array_combine(array_keys($array1), array_values($array2)); 
+0

'array_combine()'要求兩個數組具有相同數量的項目,否則會出現錯誤「兩個參數應具有相同數量的元素」。另外,OP只想保留與包含在第二個數組中的值相匹配的鍵。 – kiamlaluno

0

有沒有這樣的功能,但你可以嘗試用下面的代碼

$arr1 = array('one' => 'one_v', 'two' => 'two_v', 'three' => 'three_v'); 
$arr2 = array('one', 'three'); 

// flip, so keys become values 
$arr1_flipped = array_flip($arr1); 

array_flip(array_diff($arr1_flipped, $arr2)); // returns Array([two] => two_v) 

array_flip(array_intersect($arr1_flipped, $arr2)) // returns Array ([one] => one_v [three] => three_v) 
0

如果您使用數組翻轉功能像什麼@Artem大號建議你可以達到你想要什麼,但能夠取得什麼它會花費一點額外的處理時間,因爲它調用array_flip 3次來實現你想要的。

array_combine不能滿足您的需要。

array_rip在php中不可用。所以我建議你有算法,即邏輯準備好你的功能。在你的項目中創建functions.php並在你的文件中添加你的函數。在你的代碼中包含這個文件,然後你可以使用這個函數。

0

如果您使用PHP 5.1.0或更高版本,則可以使用array_intersect_key(),如下面的代碼所示。

function array_rip(array &$array, array $keys) { 
    $result = array_intersect_key($array, array_flip($keys)); 
    $array = array_diff($array, $result); 

    return $result; 
} 
1

你可以縮短到這個;我不認爲這會更有效率。

function array_rip(array &$array, array $keys) 
{ 
    $new = array_intersect_key($array, array_flip($keys)); 
    $array = array_diff($array, $new); 
    return $new; 
} 
相關問題