Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.
If the asker does not get an answer then they have 10 days to request a refund.
$5
Combine 2 arrays to 1
I have two arrays:
Array (
[0] => stdClass Object (
[name] => John
[id] => 1
)
}
Array (
[0] => stdClass Object (
[meta_value] => 9
[id] => 1
)
} I need to get:
Array (
[0] => stdClass Object (
[meta_value] => 9
[name] => John
[id] => 1
)
}
This question has been answered.
Igor | 05/25/12 at 12:32pm
Edit
The experts have suggested, on average, a prize of $10 for this question.
(7) Possible Answers Submitted...
See a chronological view of answers?
Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.
-

Last edited:
05/25/12
12:39pmArnav Joy says:use this
<?php $result = array_unique(array_merge($array1, $array2)); ?>- 05/25/12 12:50pm
Igor says:Hi Arnav,
Unfortunately, I've got an error:
Catchable fatal error: Object of class stdClass could not be converted to string - 05/25/12 4:20pm
Arnav Joy says:try this
<?php
$array1 = array(0 => array(
'name' => 'John',
'id' => 1
));
$array2 = array(0 => array(
'meta_value' => 9,
'id' => 1
));
$array3 = new stdClass();
foreach ($array1 as $k => $val) {
foreach($val as $key => $value) {
$array3->{$key} = $value;
}
}
foreach ($array2 as $k => $val) {
foreach($val as $key => $value) {
$array3->{$key} = $value;
}
}
$arr[0] = $array3 ;
print_r( $arr );
?>
- 05/25/12 12:50pm
-

Last edited:
05/25/12
12:40pmDaniel Yoen says:<?php
$array1 = array();
$array2 = array();
$result = array_merge($array1, $array2);
?> -

Last edited:
05/25/12
12:43pmFrancisco Javier Carazo Gil says:You have: array_a and array_b, well:
array_new = array();
for($i = 0; $i < count($array_a); $i++)
{
array_new[] = array_unique(array_merge($array_a[$i], $array_b[$i]));
}
Hope this helps!- 05/25/12 12:43pm
Francisco Javier Carazo Gil says:You have: array_a and array_b, well:
array_new = array();
for($i = 0; $i < count($array_a); $i++)
{
array_new[] = array_unique(array_merge($array_a[$i], $array_b[$i]));
}
Hope this helps!
- 05/25/12 12:43pm
-

Last edited:
05/25/12
12:43pmJerson Baguio says:try array_merge i think this is the function to achieve your target array
http://www.w3schools.com/php/func_array_merge.asp -

Last edited:
05/25/12
12:47pm -
Last edited:
05/25/12
12:55pmKailey Lampert says:$merged = array( (object) array_merge((array) $array1[0], (array) $array2[0]) );
I created the the arrays you wanted to merge and tested the script. Screenshot: http://cl.ly/GttnPrevious versions of this answer: 05/25/12 at 12:55pm
- 05/25/12 1:10pm
Igor says:Kailey,
Thank you for a reply. That almost works for me. Is there way to get result by the same way in case I have a few arrays on each sides?
e.g.
Array (
[0] => stdClass Object (
[name] => John
[id] => 1
)
}
Array (
[1] => stdClass Object (
[name] => Mark
[id] => 2
)
}
Array (
[0] => stdClass Object (
[meta_value] => 9
[id] => 1
)
}
Array (
[1] => stdClass Object (
[meta_value] => 10
[id] => 2
)
} - 05/25/12 1:25pm
Kailey Lampert says:I'm assuming an key of 0 in my little script.
Depending on how many you're dealing with, you can run the script a few times and manually change the keys:
$merged = array( (object) array_merge((array) $array1[1], (array) $array2[1]) );
If you have a whole bunch, you can run it through a loop. I'm assuming 20 below:
for( $i = 0; $i <= 20; ++$i ) {
$merged = array( (object) array_merge((array) $array1[ $i ], (array) $array2[ $i ]) );
}
Are you dealing with a lot of variables, each containing an array with an object? Or just one variable containing an array of arrays each containing an object? - 05/25/12 1:48pm
Igor says:I have a very similar arrays. An originaly, I just need to copy [name] from first array to the second array.
Your example with for operator works too, however, in this case $merged result will be rewrited on each time of looping. - 05/25/12 1:50pm
Kailey Lampert says:True, but I also don't know what you want your end result to look like. maybe:
$merged = array();
for( $i = 0; $i <= 20; ++$i ) {
$merged[] = array( (object) array_merge((array) $array1[ $i ], (array) $array2[ $i ]) );
}
- 05/25/12 1:10pm
-

Last edited:
05/25/12
12:57pmLuis Abarca says:Try this simple way
http://codepad.org/SMw5TrEJ
<?php
$array_a = array(0 => array(
'name' => 'John',
'id' => 1
));
$array_b = array(0 => array(
'meta_value' => 9,
'id' => 1
));
$array_c = array();
foreach ($array_a as $key => $subarray) {
foreach($subarray as $name => $value) {
$array_c[$key][$name] = $value;
}
}
foreach ($array_b as $key => $subarray) {
foreach($subarray as $name => $value) {
$array_c[$key][$name] = $value;
}
}
print_r( $array_c );
- 05/25/12 1:19pm
Igor says:Hi Luis,
Thank you! That almost works for me.
However I've got Array instead of stdClass Object:
Your example:
Array (
[0] => Array (
[meta_value] => 9
[name] => John
[id] => 1
)
}
instead of:
Array (
[0] => stdClass Object (
[meta_value] => 9
[name] => John
[id] => 1
)
}
How to get a correct result? - 05/25/12 2:09pm
Luis Abarca says:Change the array for an stdClass
http://codepad.org/6rs4DZAO
<?php
$array_a = array(0 => array(
'name' => 'John',
'id' => 1
));
$array_b = array(0 => array(
'meta_value' => 9,
'id' => 1
));
$array_c = new stdClass();
foreach ($array_a as $key => $subarray) {
foreach($subarray as $name => $value) {
$array_c->{$name} = $value;
}
}
foreach ($array_b as $key => $subarray) {
foreach($subarray as $name => $value) {
$array_c->{$name} = $value;
}
}
print_r( $array_c );
- 05/25/12 4:06pm
Igor says:Now I've got a
stdClass Object (
[meta_value] => 9
[name] => Metal Professionals
[id] => 1
)
But I need a
Array (
[0] => stdClass Object (
[meta_value] => 9
[name] => Metal Professionals
[id] => 1
)
I appreciate your help. - 05/25/12 4:13pm
Luis Abarca says:Ohh i see, just add the object to an array,
http://codepad.org/DLXR9eQr
<?php
$array_a = array(0 => array(
'name' => 'John',
'id' => 1
));
$array_b = array(0 => array(
'meta_value' => 9,
'id' => 1
));
$array_c = array();
foreach ($array_a as $key => $subarray) {
$array_c[$key] = new stdClass();
foreach($subarray as $name => $value) {
$array_c[$key]->{$name} = $value;
}
}
foreach ($array_b as $key => $subarray) {
foreach($subarray as $name => $value) {
$array_c[$key]->{$name} = $value;
}
}
print_r( $array_c );
- 05/25/12 4:15pm
Luis Abarca says:This way
http://codepad.org/DLXR9eQr
<?php
$array_a = array(0 => array(
'name' => 'John',
'id' => 1
));
$array_b = array(0 => array(
'meta_value' => 9,
'id' => 1
));
$array_c = array();
foreach ($array_a as $key => $subarray) {
$array_c[$key] = new stdClass();
foreach($subarray as $name => $value) {
$array_c[$key]->{$name} = $value;
}
}
foreach ($array_b as $key => $subarray) {
if (!is_object($array_c[$key])) {
$array_c[$key] = new stdClass();
}
foreach($subarray as $name => $value) {
$array_c[$key]->{$name} = $value;
}
}
print_r( $array_c );
- 05/25/12 4:32pm
Igor says:BINGO! Thats that I need!
That works! Amazing!
Luis,
Thank you so much for your time. I'm really appreciate your help.
PS: Can I doubled the bet for another small question? Is there way to sort $array_c by meta_value key value? I mean DESC order. - 05/25/12 5:27pm
Igor says:I've found a solution.
function cmp($a, $b) {
if ($a->meta_value == $b->meta_value) :
return 0;
else :
return $a->meta_value < $b->meta_value ? 1 : -1;
endif;
}
usort($array_c, 'cmp');
Luis,
Thanks again!
- 05/25/12 1:19pm
This question has expired.
Gabriel Reguly, Igor, Arnav Joy voted on this question.
Current status of this question: Completed
Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.
If the asker does not get an answer then they have 10 days to request a refund.
