PHP의 연관 배열 슬라이스에 할당
-
10-07-2019 - |
문제
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에서 똑같이 할 수있는 방법이 있습니까? 사실, Assoc 배열 조각을 전혀 얻는 방법조차 있습니까?
해결책
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
다른 팁
간단한 1 라이너 (이 방법 중 일부는 요청 시점에 사용할 수있는 것보다 새로운 버전의 PHP가 필요합니다) :
$hash = array(
'foo'=>1,
'bar'=>2,
'baz'=>3,
);
$hash = array_merge( $hash, array( 'foo' => 4, 'bar' => 4, 'baz' => 5 ) );
PHP 수동 입력 Array_merge.
특정 배열 키 세트를 얻으려면 다음을 사용할 수 있습니다.
$subset = array_intersect_key( $hash, array_fill_keys( array( 'foo', 'baz' ), '' ) );
PHP 수동 항목 array_intersect_key 그리고array_fill_keys.
해시 정의 :
$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;
매뉴얼의 목록 () 함수를 참조하십시오.
요컨대, 아니요. 그러나 다음과 같은 기능을 사용할 수 있습니다.
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의 의견에 따라 조정 된 코드.
제휴하지 않습니다 StackOverflow