Domanda

I have two arrays

array1:

  [0]=>array(
     ['user']=>'name1',
     ['age']=>'28'     
  ),
  [1]=>array(
     ['user']=>'name2',
     ['age']=>'58'     
  ),
  [2]=>array(
     ['user']=>'name3',
     ['age']=>'15'     
  )

array2

  [0]=>array(
     ['user']=>'name3',
     ['sex']=>'male'     
  ),
  [1]=>array(
     ['user']=>'name1',
     ['sex']=>'male'     
  ),
  [2]=>array(
     ['user']=>'name2',
     ['sex']=>'female'
  )

Expecting result

  [0]=>array(
     ['user']=>'name1',
     ['age']=>'28',
     ['sex']=>'male'     
  ),
  [1]=>array(
     ['user']=>'name2',
     ['age']=>'58',
     ['sex']=>'male'     
  ),
  [2]=>array(
     ['user']=>'name3',
     ['age']=>'15',
     ['sex']=>'female'
  )

I have tried lot of ways array_merge, array_combine . But i dont know where i did mistakes. please help me

È stato utile?

Soluzione

Well, if you cannot find built-in function to match your particular case (and there will be plenty of such cases), then maybe you have to try by yourself?

Map the arrays by the name key and fill a new one:

<?php
$arr1 =array ( 0=>array(
     'user'=>'name1',
     'age'=>'28'     
  ),
  1=>array(
     'user'=>'name2',
     'age'=>'58'     
  ),
  2=>array(
     'user'=>'name3',
     'age'=>'15'     
  )
);

$arr2 =array (0=>array(
     'user'=>'name3',
     'sex'=>'male'     
  ),
  1=>array(
     'user'=>'name1',
     'sex'=>'male'     
  ),
  2=>array(
     'user'=>'name2',
     'sex'=>'female'
  )
);

$result = array();
foreach ($arr1 as $key => $value) {
    foreach ($arr2 as $k => $v) {
        if($value['user'] == $v['user']) {
            $result[$k]['user'] = $arr1[$k]['user'];
            $result[$k]['age'] = $arr1[$k]['age'];
            $result[$k]['sex'] = $arr2[$k]['sex'];
        }
    }
}

var_dump($result);

array (size=3)
  1 => 
    array (size=3)
      'user' => string 'name2' (length=5)
      'age' => string '58' (length=2)
      'sex' => string 'male' (length=4)
  2 => 
    array (size=3)
      'user' => string 'name3' (length=5)
      'age' => string '15' (length=2)
      'sex' => string 'female' (length=6)
  0 => 
    array (size=3)
      'user' => string 'name1' (length=5)
      'age' => string '28' (length=2)
      'sex' => string 'male' (length=4)

You can use sort to sort by keys:

sort($result);
var_dump($result);

array (size=3)
  0 => 
    array (size=3)
      'user' => string 'name1' (length=5)
      'age' => string '28' (length=2)
      'sex' => string 'male' (length=4)
  1 => 
    array (size=3)
      'user' => string 'name2' (length=5)
      'age' => string '58' (length=2)
      'sex' => string 'male' (length=4)
  2 => 
    array (size=3)
      'user' => string 'name3' (length=5)
      'age' => string '15' (length=2)
      'sex' => string 'female' (length=6)

Altri suggerimenti

I would use array_merge

Like below..

$result = array_merge($array1, $array2);
print_r($result);

Then use array_unique to get the unique values.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top