Compare arrays and add missing key value to array [duplicate] - php

This question already has answers here:
PHP, Merging arrays with common keys
(2 answers)
Closed 6 years ago.
I have two arrays:
First
array (size=6)
0 =>
array (size=2)
'Age' => string '25-34' (length=5)
'Count' => string '45' (length=2)
1 =>
array (size=2)
'Age' => string '55-64' (length=5)
'Count' => string '1' (length=1)
2 =>
array (size=2)
'Age' => string '13-17' (length=5)
'Count' => string '3' (length=1)
3 =>
array (size=2)
'Age' => string '35-44' (length=5)
'Count' => string '11' (length=2)
4 =>
array (size=2)
'Age' => string '18-24' (length=5)
'Count' => string '46' (length=2)
5 =>
array (size=2)
'Age' => string '45-54' (length=5)
'Count' => string '2' (length=1)
Second:
array (size=5)
0 =>
array (size=2)
'Age' => string '65+' (length=3)
'Count' => string '1' (length=1)
1 =>
array (size=2)
'Age' => string '13-17' (length=5)
'Count' => string '4' (length=1)
2 =>
array (size=2)
'Age' => string '35-44' (length=5)
'Count' => string '3' (length=1)
3 =>
array (size=2)
'Age' => string '25-34' (length=5)
'Count' => string '11' (length=2)
4 =>
array (size=2)
'Age' => string '18-24' (length=5)
'Count' => string '20 |' (length=4)
Now what here I am getting is that First array size is larger than Second one, so I need a solution for making the small size array similar to larger size array.
With same keys, and add value zero to new added keys value.

array_merge( $firstArray, $secondArray );
Please see array_merge();

Related

How to append an associative into another associative array by continuing the increment of keys? [duplicate]

This question already has answers here:
PHP append one array to another (not array_push or +)
(11 answers)
Closed 2 years ago.
I have the following associative array:
0 =>
array (size=2)
'id' => string '0000' (length=4)
'polling_id' => string '0' (length=1)
1 =>
array (size=2)
'id' => string '0001' (length=4)
'polling_id' => string '1' (length=1)
And I have this second associative array:
0 =>
array (size=3)
'id' => string '0002' (length=4)
'polling_id' => string '0' (length=1)
'backup_id' => string '4500' (length=4)
1 =>
array (size=3)
'id' => string '0003' (length=4)
'polling_id' => string '0' (length=1)
'backup_id' => string '4500' (length=4)
I want it to look like:
0 =>
array (size=2)
'id' => string '0000' (length=4)
'polling_id' => string '0' (length=1)
1 =>
array (size=2)
'id' => string '0001' (length=4)
'polling_id' => string '1' (length=1)
2 =>
array (size=3)
'id' => string '0002' (length=4)
'polling_id' => string '0' (length=1)
'backup_id' => string '4500' (length=4)
3 =>
array (size=3)
'id' => string '0003' (length=4)
'polling_id' => string '0' (length=1)
'backup_id' => string '4500' (length=4)
How can I achieve this?
Try array_merge($a1,$a2)to merge these two arrays.

Remove array 0 in array PHP

I have 2 product id and my code is:
$Final=array();
foreach ($ids as $me)
{
$op=DB::table('product')->where(['id'=>$me])->get();
//$Final[]= $op;
array_push($Final,$op);
}
This code returns:
array (size=1)
0 =>
array (size=1)
0 =>
array (size=15)
'id' => string '34' (length=2)
'title' => string 'گوسفند' (length=12)
'title_url' => string 'sheep' (length=5)
'code' => string 'eerer' (length=5)
'code_url' => string 'eerer' (length=5)
'content' => string '<p>sheep</p>
' (length=14)
'cat' => string '68' (length=2)
'price' => string '50000' (length=5)
'product_state' => string '1' (length=1)
'date' => string '' (length=0)
'order_number' => string '0' (length=1)
'Special' => string '0' (length=1)
'View' => string '0' (length=1)
'number_product' => string '1' (length=1)
'discounts' => string '' (length=0)
I need to remove
array (size=2) 0 => array (size=1) 0 =>
$ids => filter id
for get product number for example (22,34)
I Think you should try this.
$Final=array();
foreach ($ids as $me){
$op=DB::table('product')->where(['id'=>$me])->get();
if($op) {
array_push($Final,$op[0]);
}
}
Then you will get these values.
array (size=2)
0 =>
array (size=15)
'id' => string '34' (length=2)
1 =>
array (size=15)
'id' => string '22' (length=2)
If you are using Any framework then framwork provide us some methods to run query with where in to get all the records in single query.
$op=DB::table('product')->whereIn('id'=>$ids)->get();
you will get array of collection for all the products.

Sort multidimensional arrays recursively after setting up child-parent realtions

I have a database structure like this:
ID name sort parent
1 item1 1 0
2 subitem1 2 1
3 subsubitem1 1 2
4 subitem2 1 1
I write the database into an array
array (size=4)
0 =>
array (size=4)
'id' => string '1' (length=1)
'name' => string 'item1' (length=5)
'parent' => string '0' (length=1)
'sort' => string '1' (length=1)
1 =>
array (size=4)
'id' => string '2' (length=1)
'name' => string 'subitem1' (length=8)
'parent' => string '1' (length=1)
'sort' => string '2' (length=1)
2 =>
array (size=4)
'id' => string '3' (length=1)
'name' => string 'subsubitem1' (length=11)
'parent' => string '2' (length=1)
'sort' => string '1' (length=1)
3 =>
array (size=4)
'id' => string '4' (length=1)
'name' => string 'subitem2' (length=8)
'parent' => string '1' (length=1)
'sort' => string '1' (length=1)
and restructure that array to set up child-parent relations with this function:
function generateNavArray($arr, $parent = 0)
{
$items = Array();
foreach($arr as $item)
{
if($item['parent'] == $parent)
{
$item['child'] = isset($item['child']) ? $item['child'] : GenerateNavArray($arr, $item['id']);
$items[] = $item;
}
}
return $items;
}
and the generated array looks like this
array (size=1)
0 =>
array (size=5)
'id' => string '1' (length=1)
'name' => string 'item1' (length=5)
'parent' => string '0' (length=1)
'sort' => string '1' (length=1)
'child' =>
array (size=2)
0 =>
array (size=5)
'id' => string '2' (length=1)
'name' => string 'subitem' (length=4)
'parent' => string '1' (length=1)
'sort' => string '2' (length=1)
'child' =>
array (size=1)
0 =>
array (size=5)
'id' => string '3' (length=1)
'name' => string 'subsubitem1' (length=11)
'parent' => string '2' (length=1)
'sort' => string '1' (length=1)
'child' =>
array (size=0)
empty
1 =>
array (size=5)
'id' => string '3' (length=1)
'name' => string 'subitem2' (length=8)
'parent' => string '1' (length=1)
'sort' => string '1' (length=1)
'child' =>
array (size=0)
empty
now i need to sort every dimension of the array by the sort value, (my "real array" has more subarrays then this one).
i played around with multisort but i can't seem to find the solution
any ideas?
Sort the array when it is 1 dimension before you build the multi-dimensional array. Even better if you are using a query, sort it there. Sort by parent then sort. When you build your multidimensional array, each child will be appended to the parent. If they are already in the correct order, they will end up in the same order.

PHP 2 Arrays Same Keys Merge Values

I have 2 arrays that have the same keys but different values. I am trying to merge just the values into a new array. I have tried array_merge, array_merge_recursive, array1+array2, array_intersect, array_intersect_key(array_merge())
MAIN ARRAY
array (size=2)
'attr' =>
array (size=6)
'attr__6__23__grad_gown_size' =>
array (size=3)
'val' => string '5ft.9in. - 5ft.11in.' (length=20)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=1)
...
'attr__1__23__grad_dvd' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
...
'attr__2__23__grad_combo' =>
array (size=3)
'val' => string 'Yes' (length=3)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=1)
...
'attr__3__23__grad_tas_dip_only' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
...
'attr__4__23__grad_tassel' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
...
'attr__5__23__grad_honor_seal' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
...
'attr_add' =>
array (size=6)
'attr__6__23__grad_gown_size' =>
array (size=3)
'val' => string '' (length=0)
'qty' => string '0' (length=1)
'ordqty' =>
array (size=0)
...
'attr__1__23__grad_dvd' =>
array (size=3)
'val' => string 'Yes' (length=3)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=0)
...
'attr__2__23__grad_combo' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=0)
...
'attr__3__23__grad_tas_dip_only' =>
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=0)
...
'attr__4__23__grad_tassel' =>
array (size=3)
'val' => string 'Yes' (length=3)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=0)
...
'attr__5__23__grad_honor_seal' =>
array (size=3)
'val' => string 'Yes' (length=3)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=0)
...
Array 1 attr
array (size=3)
'val' => string '5ft.9in. - 5ft.11in.' (length=20)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=1)
27 => string '1' (length=1)
array (size=3)
'val' => null
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
27 => string '0' (length=1)
Array 2 attr_add
array (size=3)
'val' => string '' (length=0)
'qty' => string '0' (length=1)
'ordqty' =>
array (size=1)
30 => string '0' (length=1)
array (size=3)
'val' => string 'Yes' (length=3)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=1)
30 => string '1' (length=1)
Result
array (size=1)
'attr' =>
array (size=6)
'attr__6__23__grad_gown_size' =>
array (size=3)
'val' => string '5ft.9in. - 5ft.11in.' (length=20)
'qty' => string '1' (length=1)
'ordqty' =>
array (size=2)
27 => string '1' (length=1)
30 => string '0' (length=1)
'attr__1__23__grad_dvd' =>
array (size=3)
'val' => Yes
'qty' => string '1' (length=1)
'ordqty' =>
array (size=1)
27 => string '0' (length=1)
30 => string '1' (length=1)
What I'm trying
foreach($extra_fields_array['attr'] as $key=>$value)
{
$ovalue = $extra_fields_array['attr'][$key]; // Array 1
$nvalue = $attr_array['attr_add'][$key]; // Array 2
$new_array['attr'][$key] = array_merge($nvalue,$ovalue); // NOT WORKING
/*
* What do I do here
*/
}
echo '<pre>'; var_dump($new_array);echo '</pre>';
I hope this makes sense. I've been stuck on it all day.
Thanks for any help in advance.

Merge 1 multidimensional array with a simple array

I am trying to merge 2 arrays: 1 multidimensional and another one normal:
Multidimensional array - $_SESSION["products"]
array (size=2)
0 =>
array (size=4)
'name' => string 'Lg Monitor' (length=10)
'code' => string '30' (length=2)
'qty' => string '1' (length=1)
'price' => string '1300.50' (length=7)
1 =>
array (size=4)
'name' => string 'Smasung Monitor' (length=15)
'code' => string '29' (length=2)
'qty' => string '1' (length=1)
'price' => string '2300.50' (length=7)
Simple array - $qty
array (size=2)
0 => string '2' (length=1)
1 => string '3' (length=1)
EXPECTED OUTPUT
array (size=2)
0 =>
array (size=4)
'name' => string 'Lg Monitor' (length=10)
'code' => string '30' (length=2)
'qty' => string '2' (length=1) // notice the qty change
'price' => string '1300.50' (length=7)
1 =>
array (size=4)
'name' => string 'Smasung Monitor' (length=15)
'code' => string '29' (length=2)
'qty' => string '3' (length=1) // notice the qty change
'price' => string '2300.50' (length=7)
I tried:
foreach ($_SESSION["products"] as $cart_itm){
foreach($qty as $qt) {
$cart_itm['qty'] = $qt;
}
}
But did not work, cart_itm['qty'] remained the same (1).
Try with this:
foreach ($_SESSION["products"] as $key => &$cart_itm){
$cart_itm['qty'] = $qty[$key];
}

Categories