반응형
두 개의 PHP Doctrine 2 ArrayCollection ()을 병합하는 방법
두 개의 교리를 충분한 수있는 방법이 ArrayCollection()
있습니까? 같은 것 :
$collection1 = new ArrayCollection();
$collection2 = new ArrayCollection();
$collection1->add($obj1);
$collection1->add($obj2);
$collection1->add($obj3);
$collection2->add($obj4);
$collection2->add($obj5);
$collection2->add($obj6);
$collection1->concat($collection2);
// $collection1 now contains {$obj1, $obj2, $obj3, $obj4, $obj5, $obj6 }
두 번째 컬렉션을 반복하고 각 요소를 첫 번째 컬렉션에 하나씩 추가 할 수 있는지 알고 싶습니다.
감사합니다!
나를 위해 더 나은 (그리고 작동하는) 변형 :
$collection3 = new ArrayCollection(
array_merge($collection1->toArray(), $collection2->toArray())
);
간단하게 다음을 수행 할 수 있습니다.
$a = new ArrayCollection();
$b = new ArrayCollection();
...
$c = new ArrayCollection(array_merge((array) $a, (array) $b));
이 경우에는 니펫이 도움이 될 수 있습니다. PHP5.6에서 사용하기 위해 가변 함수 변수를 사용합니다.
/**
* @param array... $arrayCollections
* @return ArrayCollection
*/
public function merge(...$arrayCollections)
{
$returnCollection = new ArrayCollection();
/**
* @var ArrayCollection $arrayCollection
*/
foreach ($arrayCollections as $arrayCollection) {
if ($returnCollection->count() === 0) {
$returnCollection = $arrayCollection;
} else {
$arrayCollection->map(function ($element) use (&$returnCollection) {
if (!$returnCollection->contains($element)) {
$returnCollection->add($element);
}
});
}
}
return $returnCollection;
}
어떤 경우에는 편리 할 수 있습니다.
$newCollection = new ArrayCollection((array)$collection1->toArray() + $collection2->toArray());
이보다 빠 사용 array_merge
. 에 $collection1
동일한 키 이름 이 있으면 좋겠습니다 $collection2
. 실제 가치가 무엇이든
한 배열의 내용을 다른 배열에 추가하려면 컬렉션을 반복해야합니다. ArrayCollection은 래퍼 클래스이므로 키를 유지하면서 요소 배열을 병합 할 수 있습니다. $ collection2의 배열 키는 아래 도우미 함수를 사용하여 $ collection1의 기존 키를 재정의합니다.
$combined = new ArrayCollection(array_merge_maintain_keys($collection1->toArray(), $collection2->toArray()));
/**
* Merge the arrays passed to the function and keep the keys intact.
* If two keys overlap then it is the last added key that takes precedence.
*
* @return Array the merged array
*/
function array_merge_maintain_keys() {
$args = func_get_args();
$result = array();
foreach ( $args as &$array ) {
foreach ( $array as $key => &$value ) {
$result[$key] = $value;
}
}
return $result;
}
Yury Pliashkou 의 의견을 바탕으로 :
function addCollectionToArray( $array , $collection ) {
$temp = $collection->toArray();
if ( count( $array ) > 0 ) {
if ( count( $temp ) > 0 ) {
$result = array_merge( $array , $temp );
} else {
$result = $array;
}
} else {
if ( count( $temp ) > 0 ) {
$result = $temp;
} else {
$result = array();
}
}
return $result;
}
당신이 좋아할 수도 있고 ... 아닐 수도 있고 ... 누군가 필요할 때를 대비해서 그냥 던질 생각 이었죠.
Clousures 사용 PHP5> 5.3.0
$a = ArrayCollection(array(1,2,3));
$b = ArrayCollection(array(4,5,6));
$b->forAll(function($key,$value) use ($a){ $a[]=$value;return true;});
echo $a.toArray();
array (size=6) 0 => int 1 1 => int 2 2 => int 3 3 => int 4 4 => int 5 5 => int 6
참고 URL : https://stackoverflow.com/questions/10083158/how-to-merge-two-php-doctrine-2-arraycollection
반응형
'ProgramingTip' 카테고리의 다른 글
UIViewController의 뷰를 서브 뷰로 추가하는 방법 (0) | 2020.10.18 |
---|---|
CSS3 box-shadow : 인세 트는 한쪽 또는 양면 만 할 수 있습니까? (0) | 2020.10.18 |
Windows에서 Npm을 때 때 SSL 인증서 오류를 수정하는 방법은 무엇입니까? (0) | 2020.10.18 |
Skype 프로필에 대한 응용 프로그램 링크 만들기 (0) | 2020.10.18 |
DataGridView 자동 맞춤 및 채우기 (0) | 2020.10.18 |