2

I have two arrays: ('admin','admin2', 'admin3' can be too many, and names can also differ other than 'admin')

$old = array(
array('admin'=>array('a'=>'aaa','b'=>'bbb')),
array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$new = array(
array('admin2'=>array('e'=>'eee','f'=>'fff')),
array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

I want to have this array from both above arrays: (new array with all different keys in both PLUS similar keys from new array)

$output = array(
array('admin'=>array('a'=>'aaa','b'=>'bbb')),
array('admin2'=>array('e'=>'eee','f'=>'fff')),
array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);
0

3 Answers 3

1
// Remove one level of array to make arrays as ['admin'=>array, 'admin2'=>array]
$old1 = call_user_func_array('array_merge', $old);
$new1 = call_user_func_array('array_merge', $new);
// Make replacement
$ready =  array_replace($old1, $new1);
// Return level making every item as array 
$result = array();
foreach($ready as $k=>&$v) 
    $result[] = array($k=>$v);
print_r($result);

demolink

Sign up to request clarification or add additional context in comments.

2 Comments

It is working fine but I need a simpler solution, If no one posted a simple solution then I will surely Select your answer.
I don't think that with such structure of array it can be easy. But, maybe
1

This code will solve your problem :

<?php 
$array1 = array(
    array('admin'=>array('a'=>'aaa','b'=>'bbb')),
    array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$array2 = array(
    array('admin2'=>array('e'=>'eee','f'=>'fff')),
    array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

$output = $array1; ///merge array1 into output array

foreach($array2 as $key => $val)
{
    $is_present_key = false;
    $first_key = key($val);
    foreach($output as $k => $v)
    {
        if(array_key_exists($first_key,$output[$k])) ////check if key exit in $output array
        {
            $output[$k] = $val; ///push new value if key exists in $output
            $is_present_key = true;
        }
    }
    if($is_present_key == false)///skip for duplicate of new values if key exists in $output 
    {
        $output[] = $val;
    }
}

echo "<pre>"; print_r($output);

?>

This will give you :

Array
(
    [0] => Array
        (
            [admin] => Array
                (
                    [a] => aaa
                    [b] => bbb
                )

        )

    [1] => Array
        (
            [admin2] => Array
                (
                    [e] => eee
                    [f] => fff
                )

        )

    [2] => Array
        (
            [admin3] => Array
                (
                    [g] => ggg
                    [h] => hhh
                )

        )

)

LIVE EXAMPLE

Comments

0
$old = array(
  array('admin'=>array('a'=>'aaa','b'=>'bbb')),
  array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$new = array(
  array('admin2'=>array('e'=>'eee','f'=>'fff')),
  array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

$arr=array_merge($new,$old);
$new_arr=array();
foreach($arr as $key=>$val){
    foreach($val as $k=>$v){
        if(array_key_exists($k, $new_arr)){
            continue;
        }else{
            $new_arr[$k]=$v;
        }
    }
}
echo "<pre>";print_r($new_arr); echo "</pre>";

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.