Reputation: 174
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
Upvotes: 0
Views: 836
Reputation: 7034
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)
Upvotes: 2
Reputation: 2731
I would use array_merge
Like below..
$result = array_merge($array1, $array2);
print_r($result);
Then use array_unique to get the unique values.
Upvotes: -1