2013-04-06 84 views
0

比方說我們有數組:PHP - 從陣列移動項目的陣列與關鍵LIKE

$array1 = array (
    'key1' => 1, 
    'non1' => 1, 
    'key2' => 1, 
    'non2' => 1, 
    'non3' => 1, 
    'non4' => 1, 
    'key3' => 1, 
    'key4' => 1 
); 

如何將所有具有key name LIKE "key"密鑰並將其移動到另一個陣列。

$array2 = movekey('key',$array1); 

還會送:

array1 = array (
    'non1' => 1, 
    'non2' => 1, 
    'non3' => 1, 
    'non4' => 1 

); 

array2 = array (
    'key1' => 1, 
    'key2' => 1, 
    'key3' => 1, 
    'key4' => 1 
); 
+1

你試過什麼樣的hava? – 2013-04-06 06:39:53

+0

@YogeshSuthar這就是作弊! – Barmar 2013-04-06 06:40:08

+0

編寫一個foreach循環來檢查密鑰,並決定是否將密鑰和值複製到結果中。有什麼問題? – Barmar 2013-04-06 06:41:04

回答

2

只是因爲它看起來好玩,把它放在函數形式每個操作的原始願望:

function moveKey($cmp, Array & $ar) 
{ 
    $y = array(); 
    foreach($ar as $key => $value) { 
     if(strpos($key, $cmp) !== false) { 
      $y[$key] = $value; 
      unset($ar[$key]); 
     } 
    } 
    return $y; 
} 

,然後測試功能:

$array1 = array (
    'key1' => 1, 
    'non1' => 1, 
    'key2' => 1, 
    'non2' => 1, 
    'non3' => 1, 
    'non4' => 1, 
    'key3' => 1, 
    'key4' => 1 
); 

$a2 = moveKey('key', $array1); 
echo "<pre>". print_r($array1, true) ."\n". print_r($a2, true) ."</pre>"; 

,並將其輸出:

Array 
(
    [non1] => 1 
    [non2] => 1 
    [non3] => 1 
    [non4] => 1 
) 

Array 
(
    [key1] => 1 
    [key2] => 1 
    [key3] => 1 
    [key4] => 1 
) 

玩得開心!

2
$result = array(); 
foreach ($array as $key => $value) { 
    if (strpos($key, 'key') !== false) { 
    $result[$key] = $value; 
    } 
} 
3
$array2 = array(); 
    foreach($array1 as $key => $val) { 
    if(strpos($key,'key')!==false){ 
     $array2[$key] = $val; //Copy all the values that have key-name like 'key'. 
     unset($array1[$key]); //Removes the copied key and value. 
    } 
    } 
1
foreach (array_keys($array1) as $key) { 
    if (!preg_match('/^key\d+/', $key)) { 
     unset($array1[$key]); 
    } 
} 
print_r ($array1); 
+1

它不創建第二個數組,並使用一個密集且不必要的'preg_match'來斷言開始位置 - 當它被要求提供'like' not' 「^^而不是'preg_match'可以使用['substr($ key,0,3)=='key''](http://www.php.net/manual/en/function.substr.php)(也沒有被指定有數字後面=]) – Jon 2013-04-06 07:19:09