IT Share you

PHP는 두 개의 연관 배열을 하나의 배열로 결합합니다.

shareyou 2020. 11. 10. 22:38
반응형

PHP는 두 개의 연관 배열을 하나의 배열로 결합합니다.


$array1 = array("$name1" => "$id1");

$array2 = array("$name2" => "$id2", "$name3" => "$id3");

모두 함께 결합 된 새 어레이가 필요합니다. 즉,

$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");

이를 수행하는 가장 좋은 방법은 무엇입니까?

죄송합니다. ID는 서로 일치하지 않지만 기술적으로는 이름이 일치 할 수는 있지만 가능성이 없으며 모두 하나의 배열에 나열되어야합니다. array_merge를 보았지만 이것이 최선의 방법인지 확실하지 않았습니다. 또한 이것을 어떻게 단위 테스트 하시겠습니까?


array_merge() 더 효율적이지만 몇 가지 옵션이 있습니다.

$array1 = array("id1" => "value1");

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
$array4 = $array1 + $array2;

echo '<pre>';
var_dump($array3);
var_dump($array4);
echo '</pre>';


// Results:
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }

확인하십시오 array_merge().

$array3 = array_merge($array1, $array2);

또한 중복 키를 생성하지 않고 키 => 값 연결을 array_replace유지하는 다른 배열에 의해 원래 배열이 수정되는 경우도 있습니다 .

  • 다른 배열의 동일한 키로 인해 값이 원래 배열을 덮어 씁니다.
  • 다른 어레이의 새 키가 원래 어레이에 생성됩니다.

null 배열에 대한 SeanWM의 설명을 처리하기 위해 array_merge 주위에 래퍼를 사용합니다. 나는 또한 때때로 중복을 제거하고 싶습니다. 또한 일반적으로 새 배열을 만드는 대신 하나의 배열을 다른 배열로 병합하고 싶습니다. 이것은 다음과 같이 끝납니다.

/**
 * Merge two arrays - but if one is blank or not an array, return the other.
 * @param $a array First array, into which the second array will be merged
 * @param $b array Second array, with the data to be merged
 * @param $unique boolean If true, remove duplicate values before returning
 */
function arrayMerge(&$a, $b, $unique = false) {
    if (empty($b)) {
        return;  // No changes to be made to $a
    }
    if (empty($a)) {
        $a = $b;
        return;
    }
    $a = array_merge($a, $b);
    if ($unique) {
        $a = array_unique($a);
    }
}

        $array = array(
            22 => true,
            25 => true,
            34 => true,
            35 => true,
        );

        print_r(
            array_replace($array, [
                22 => true,
                42 => true,
            ])
        );

        print_r(
            array_merge($array, [
                22 => true,
                42 => true,
            ])
        );

숫자이지만 순차적 인 연관 배열이 아닌 경우 다음을 사용해야합니다. array_replace


나는 두 개의 assoc 배열을 결합하는 깨끗한 방법을 식별 하려고이 질문을 우연히 발견했습니다.

나는 서로 관계가없는 두 개의 다른 테이블을 조인하려고했습니다.

이것이 두 테이블을 결합하는 PDO 쿼리에 대해 생각해 낸 것입니다. Samuel Cook은 array_merge()그에게 +1로 나를위한 해결책을 확인 했습니다.

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Residential_Prospects."";
        $ResidentialData = $pdo->prepare($sql);
        $ResidentialData->execute(array($lapi));
        $ResidentialProspects = $ResidentialData->fetchAll(PDO::FETCH_ASSOC);

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Commercial_Prospects."";
        $CommercialData = $pdo->prepare($sql);
        $CommercialData->execute(array($lapi));
        $CommercialProspects = $CommercialData->fetchAll(PDO::FETCH_ASSOC);

        $Prospects = array_merge($ResidentialProspects,$CommercialProspects);
        echo '<pre>';
        var_dump($Prospects);
        echo '</pre>';

아마도 이것은 다른 사람을 도울 것입니다.


UPDATE Just a quick note, as I can see this looks really stupid, and it has no good use with pure PHP because the array_merge just works there. BUT try it with the PHP MongoDB driver before you rush to downvote. That dude WILL add indexes for whatever reason, and WILL ruin the merged object. With my naïve little function, the merge comes out exactly the way it was supposed to with a traditional array_merge.


I know it's an old question but I'd like to add one more case I had recently with MongoDB driver queries and none of array_merge, array_replace nor array_push worked. I had a bit complex structure of objects wrapped as arrays in array:

$a = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]]
];
$t = [
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

And I needed to merge them keeping the same structure like this:

$merged = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]],
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

The best solution I came up with was this:

public static function glueArrays($arr1, $arr2) {
    // merges TWO (2) arrays without adding indexing. 
    $myArr = $arr1;
    foreach ($arr2 as $arrayItem) {
        $myArr[] = $arrayItem;
    }
    return $myArr;
}

참고URL : https://stackoverflow.com/questions/13170230/php-combine-two-associative-arrays-into-one-array

반응형