Подтвердить что ты не робот

Слияние массивов с теми же клавишами

В части программного обеспечения я объединять два массива с помощью функции array_merge. Но мне нужно добавить тот же массив (с теми же ключами, конечно) к существующему массиву.

Проблема:

 $A = array('a' => 1, 'b' => 2, 'c' => 3);
 $B = array('c' => 4, 'd'=> 5);

 array_merge($A, $B);

 // result
 [a] => 1 [b] => 2 [c] => 4 [d] => 5

Как вы видите, 'c' => 3 пропущен.

Итак, как я могу объединить все из них с теми же ключами?

4b9b3361

Ответ 1

Вам нужно использовать array_merge_recursive вместо array_merge. Конечно, в массиве может быть только один ключ, равный 'c', но связанное значение будет массивом, содержащим как 3, так и 4.

Посмотрите на действие.

Ответ 2

попробовать

$A = array('a' => 1, 'b' => 2, 'c' => 3);
$B = array('c' => 4, 'd'=> 5);
$c=array_merge_recursive($A,$B);

echo "<pre>";
print_r($c);
echo "</pre>";

вернет

Array
(
    [a] => 1
    [b] => 2
    [c] => Array
        (
            [0] => 3
            [1] => 4
        )

    [d] => 5
)

Ссылка

Ответ 3

 $A = array('a' => 1, 'b' => 2, 'c' => 3);
 $B = array('c' => 4, 'd'=> 5);
 $C = array_merge_recursive($A, $B);
 $aWhere = array();
 foreach ($C as $k=>$v) {

    if (is_array($v)) {
        $aWhere[] = $k . ' in ('.implode(', ',$v).')';
    }
    else {
        $aWhere[] = $k . ' = ' . $v;
    }
 }
 $where = implode(' AND ', $aWhere);
 echo $where;

Ответ 4

$arr1 = array(
   "0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
   "1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
   "2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
   "3" => array("fid" => 1, "tid" => 7, "name" => "Xi"),
   "4" => array("fid" => 2, "tid" => 9, "name" => "Xigua")
);

если вы хотите преобразовать этот массив следующим образом:

$arr2 = array(
   "0" => array(
          "0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
          "1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
          "2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
          "3" => array("fid" => 1, "tid" => 7, "name" => "Xi")
    ),

    "1" => array(
          "0" =>array("fid" => 2, "tid" => 9, "name" => "Xigua")
     )
);

Итак, мой ответ будет таким:

$outer_array = array();
$unique_array = array();
foreach($arr1 as $key => $value)
{
    $inner_array = array();

    $fid_value = $value['fid'];
    if(!in_array($value['fid'], $unique_array))
    {
            array_push($unique_array, $fid_value);
            unset($value['fid']);
            array_push($inner_array, $value);
            $outer_array[$fid_value] = $inner_array;


    }else{
            unset($value['fid']);
            array_push($outer_array[$fid_value], $value);

    }
}
var_dump(array_values($outer_array));

надеюсь, что этот ответ когда-нибудь поможет кому-то.

Ответ 5

Две записи в массиве не могут совместно использовать ключ, вам нужно будет изменить ключ для дубликата

Ответ 6

Я только что написал эту функцию, он должен сделать трюк для вас, но он оставил соединение

public function mergePerKey($array1,$array2)
    {
        $mergedArray = [];

        foreach ($array1 as $key => $value) 
        {
            if(isset($array2[$key])
             {
               $mergedArray[$value] = null;

               continue;
             }
            $mergedArray[$value] = $array2[$key];
        }

        return $mergedArray;
    }

Ответ 7

Попробуйте следующее:

$array_one = $_POST['ratio_type'];
$array_two = $_POST['ratio_type'];
$array_three = $_POST['ratio_type'];
$array_four = $_POST['ratio_type'];
$array_five = $_POST['ratio_type'];
$array_six = $_POST['ratio_type'];
$array_seven = $_POST['ratio_type'];
$array_eight = $_POST['ratio_type'];

$all_array_elements = array_merge_recursive(
    $array_one,
    $array_two,
    $array_three,
    $aray_four, 
    $array_five,
    $array_six,
    $array_seven,
    $array_eight
);

print_r($all_array_elements, 1);

foreach ($all_array_elements as $key => $value) {          
    echo $key.'-'.$value;            
}

Ответ 8

И простой, который я нашел для не ассоциативного массива:

$arrayMerged = $array1 + $array2;