2012-08-17 29 views
2

我有以下陣列:如何從數組中提取和刪除選定的變量?

$var_array = array(
"length" => 5, 
"breadth" => 5, 
"color" => "blue", 
"size" => "medium", 
"shape" => "square"); 

如何通過指定鍵提取出數組所選的變量?

例如,如果我指定breadthsize,我得到:

$breadth = 5; 
$size = "medium"; 
$var_array = array(
"length" => 5, 
"color" => "blue", 
"shape" => "square"); 

回答

1

array_diff_keyarray_intersect_key

$array = array(
    'breadth' => 1, 
    'size' => 2, 
    'length' => 3, 
    'colour' => 4, 
    'shape' => 5 
); 

$keys  = array('breadth', 'size'); 
$new_array = array_intersect_key($array, array_flip($keys)); 
$array  = array_diff_key($array, $new_array); 

會產生:

// $new_array 
array(2) { 
["breadth"] => int(1) 
["size"] => int(2) 
} 

// $array 
array(3) { 
["length"] => int(3) 
["colour"] => int(4) 
["shape"] => int(5) 
} 

如果你想把它們放在我n要局部變量,你可以這樣做:

list($length, $colour, $shape) = array_values($new_array); 

還是一個不太明確的版本:

extract($new_array); 
+0

您的編輯是正確的,但我似乎無法批准它,或者自己再編輯帖子。雖然有好點子! – Martin 2012-08-17 12:50:37

1

解決方案:

$keys = array('breadth', 'size'); // which keys do you want to extract? 

foreach($keys as $key) { 
    $newArr[$key] = $var_array[$key]; // put'em in newArr 
    unset($var_array[$key]); 
} 
extract($newArr); // extract them to convert keys to variables 
unset($newArr); // unset newArr 
+0

你不指定寬度和尺寸,你只把它們放在一個數組 – arnoudhgz 2012-08-17 12:21:03

+1

你的答案看起來不錯。我很難看到所有的答案。任何人都在意投票答案?讓我開始投票你的。 – 2012-08-17 12:36:30

0

goldenparrot已經提供了一個很好的答案,但如果你想有一個解決方案,不使用foreach,你可以用array_intersect_key代替:

$var_array = array(...) 
$keysToExtract = array('breadth', 'size'); 
extract(array_intersect_key($var_array, array_fill_keys($keysToExtract, true)); 
0

試試這個

$var_array = array(
"length" => 5, 
"breadth" => 5, 
"color" => "blue", 
"size" => "medium", 
"shape" => "square"); 


reset($var_array); 
$myarray =array(); 


while (list($key, $val) = each($var_array)) 
{ 
    if($key!='length' && $key!='size') 
    { 
    $myarray[$key] = $val; 

    }else{ 

    echo "$key => $val<br />"; 

} 


} 

輸出

size=> medium 
breadth => 5 

Array 
(
    [color] => blue 
    [length] => 5 
    [shape] => square 
) 
相關問題