4

perl では、次のようにリストをハッシュ内の複数の値に割り当てることができました。

# define the hash...
my %hash = (
  foo => 1,
  bar => 2,
  baz => 3,
);

# change foo, bar, and baz to 4, 5, and 6 respectively
@hash{ 'foo', 'bar', 'baz' } = ( 4, 5, 6 );

PHPで同じことをする方法はありますか?実際、連想配列のスライスを取得する方法さえありますか?

4

4 に答える 4

3

シンプルなワンライナー (これらのメソッドのいくつかは、質問時に利用可能だったよりも新しいバージョンの PHP を必要とします):

$hash = array(
    'foo'=>1,
    'bar'=>2,
    'baz'=>3,
);

$hash = array_merge( $hash, array( 'foo' => 4, 'bar' => 4, 'baz' => 5 ) );

array_mergeの PHP マニュアル エントリ。

特定の配列キーのセットを取得する場合は、これを使用できます。

$subset = array_intersect_key( $hash, array_fill_keys( array( 'foo', 'baz' ), '' ) );

array_intersect_keyおよび array_fill_keysの PHP マニュアル エントリ。

于 2012-10-31T23:06:08.243 に答える
1

ハッシュを定義します。

$hash = array(
  'foo' => 1,
  'bar' => 2,
  'baz' => 3,
);

# change foo, bar, and baz to 4, 5, and 6 respectively
list($hash['foo'], $hash['bar'], $hash['baz']) = array( 4, 5, 6 );

# or change one by one
$hash['foo'] = 1;
$hash['bar'] = 2;
$hash['baz'] = 3;

マニュアルの list() 関数を参照してください。

http://php.net/manual/en/function.list.php

于 2009-11-30T14:53:05.823 に答える
0

Perl 構文に相当するものはありません。ただし、対象のキーの配列を作成し、それを使用して配列の一部のみを変更できます。

$koi=array('foo', 'bar', 'baz' );
foreach($koi as $k){
  $myarr[$k]++; //or whatever
}

また

array_walk($myarr, create_function('&$v,$k','$v=(in_array($k,$koi))? $v*2 : $v;')); //you'd have to define $koi inside the function
于 2009-11-30T15:05:02.963 に答える
0

要するに、いいえ。ただし、次のような関数を使用できます。

function assignSlice($ar,$keys,$args) {
  if (count($keys) !== count($args)) {
    // may want to handle more gracefully;
    // simply returns original if numbers of keys and values
    // don't match
    return $ar;
  }                                                 
  foreach ($keys as $index=>$key) {
    $ar[$key] = $args[$index];
  }
  return $ar;
}

$test = array(
    'foo'=>1,
    'bar'=>2,
    'baz'=>3,
    );

$newtest = assignSlice($test,array('foo','bar'),array(4,5));

編集:質問に対するOPのコメントに応じて調整されたコード。

于 2009-11-30T15:05:39.420 に答える