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");
4

4 に答える 4

1

array_diff_keyおよびarray_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)
}

それらをローカル変数に入れたい場合は、次のことができます。

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

または、あまり明確でないバージョン:

extract($new_array);
于 2012-08-17T12:27:00.820 に答える
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
于 2012-08-17T12:16:51.277 に答える
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
)
于 2012-08-17T12:25:48.053 に答える
0

Goldenparrot は既に適切な回答を提供していますが、foreach を使用しないソリューションが必要な場合は、代わりにarray_intersect_keyを使用できます。

$var_array = array(...)
$keysToExtract = array('breadth', 'size');
extract(array_intersect_key($var_array, array_fill_keys($keysToExtract, true));
于 2012-08-17T12:16:57.593 に答える