Need Help to make new array using two array.
One array is
array:2 [▼
"Date Date 2018-07-23" => array:1 [▼
6 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
]
"Date Date 2018-07-28" => array:3 [▼
1 => array:2 [▼
"avg" => 0.031472222222222
"line_n0" => 1
]
4 => array:2 [▼
"avg" => 0.011111111111111
"line_n0" => 4
]
5 => array:2 [▼
"avg" => 0.011111111111111
"line_n0" => 5
]
]
]
and another array is
array:6 [▼
1 => array:2 [▼
"avg" => 0
"line_n0" => 1
]
2 => array:2 [▼
"avg" => 0
"line_n0" => 2
]
3 => array:2 [▼
"avg" => 0
"line_n0" => 3
]
4 => array:2 [▼
"avg" => 0
"line_n0" => 4
]
5 => array:2 [▼
"avg" => 0
"line_n0" => 5
]
6 => array:2 [▼
"avg" => 0
"line_n0" => 6
]
array:2 [▼
"Date Date 2018-07-23" => array:1 [▼
1 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
2 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
3 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
4 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
5 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
6 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
]
"Date Date 2018-07-28" => array:3 [▼
1 => array:2 [▼
"avg" => 0.031472222222222
"line_n0" => 1
]
2 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
3 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
4 => array:2 [▼
"avg" => 0.011111111111111
"line_n0" => 4
]
5 => array:2 [▼
"avg" => 0.011111111111111
"line_n0" => 5
]
6 => array:2 [▼
"avg" => 0.0
"line_n0" => 6
]
]
]
Please help me how i will combine the array ,I want to push 2nd array element if not fund in first array key.I trying but not clear to make new array. I have tried array merge and array combine but not clear to make this new array.
Use array_merge() function Example below
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>
Output like this:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
Related
I have these two arrays:
Page Views
array:5 [▼
0 => array:3 [▼
"lp_group" => "store"
"hour" => 15
"views" => 1
]
1 => array:3 [▼
"lp_group" => "teaser"
"hour" => 15
"views" => 2
]
2 => array:3 [▼
"lp_group" => "store"
"hour" => 17
"views" => 1
]
3 => array:3 [▼
"lp_group" => "teaser"
"hour" => 17
"views" => 3
]
4 => array:3 [▼
"lp_group" => "store"
"hour" => 21
"views" => 1
]
]
Button Clicks
array:3 [▼
0 => array:3 [▼
"lp_group" => "store"
"hour" => 15
"clicks" => 3
]
1 => array:3 [▼
"lp_group" => "teaser"
"hour" => 15
"clicks" => 3
]
2 => array:3 [▼
"lp_group" => "teaser"
"hour" => 17
"clicks" => 1
]
]
I'd like to get this:
array:5 [▼
0 => array:3 [▼
"lp_group" => "store"
"hour" => 15
"views" => 1
"clicks" => 3
]
1 => array:3 [▼
"lp_group" => "teaser"
"hour" => 15
"views" => 2
"clicks" => 3
]
2 => array:3 [▼
"lp_group" => "store"
"hour" => 17
"views" => 1
]
3 => array:3 [▼
"lp_group" => "teaser"
"hour" => 17
"views" => 3
"clicks" => 1
]
4 => array:3 [▼
"lp_group" => "store"
"hour" => 21
"views" => 1
]
]
In case you don't see it, one of the arrays (for each hour/lp_group) counts views the other clicks. I'd like to render these in a table, so I need to "combine" them into one array.
Neither array_merge nor array_merge_recursive work properly. And all the others I've tried overwrite data.
Define your two arrays as $ar1 and $ar2 and try code below:
$ar = array_map(function ($ar1, $ar2){
if ($ar1['lp_group'] == $ar2['lp_group'] && $ar1['hour'] == $ar2['hour']) {
$ar1['clicks'] = $ar2['clicks'];
}
return $ar1;
}, $ar1, $ar2);
I have a very complex problem, I have products and modifiers, and also title of the modifiers, I want to store into array the title, product id and modifiers, the way of storing is if the title is the same and the product id the same then store into array and so on for others, after that I want in blade to display product id without repeat the same product id and under it the modifier title without repeat as if i want to use groupby and under the title to show the modifiers, I tried this code but it shows every title in one array, I hope you got what I need sorry for my bad language, please note that Im new to laravel so would be great if you help me to show the result in the blade view, thank you in adavance
$customizeorders = OrderCustomize::where('userorder_id',$order_number)->with('customizeproduct')->get();
$wholeData = [];
$wrapper = [];
$previousTitle = $customizeorders[0]->customizeproduct->customizetitle->name;
$previousProduct = $customizeorders[0]->product_id;
foreach ($customizeorders as $data) {
$singleItem = [];
if ( ($data->customizeproduct->customizetitle->name == $previousTitle) AND ($data->product_id == $previousProduct) ) {
$title = $data->customizeproduct->customizetitle->name;
$product = $data->product_id;
$modifiers = $data->customizeproduct->customize_title;
array_push($singleItem, $title, $product, $modifiers);
array_push($wrapper, $singleItem);
} else {
$previousTitle = $data->customizeproduct->customizetitle->name;
$previousProduct = $data->product_id;
$modifiers = $data->customizeproduct->customize_title;
$title = $data->customizeproduct->customizetitle->name;
$product = $data->product_id;
$modifiers = $data->customizeproduct->customize_title;
array_push($singleItem, $title, $product, $modifiers);
array_push($wrapper, $singleItem);
}
array_push($wholeData, $wrapper);
$wrapper = [];
}
The result:
array:13 [▼
0 => array:1 [▼
0 => array:3 [▼
0 => "TELL US IF YOU'LL NEED"
1 => 2606
2 => "Napkins"
]
]
1 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "Sausage"
]
]
2 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "Bacon"
]
]
3 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "Onions"
]
]
4 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "Hot Giardiniera"
]
]
5 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "Garlic"
]
]
6 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2610
2 => "BBQ Sauce"
]
]
7 => array:1 [▼
0 => array:3 [▼
0 => "SELECT SODA TYPES"
1 => 2662
2 => "Assorted Regular Sodas"
]
]
8 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2618
2 => "Grilled Chicken"
]
]
9 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2618
2 => "Anchovies"
]
]
10 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2618
2 => "Black Olives"
]
]
11 => array:1 [▼
0 => array:3 [▼
0 => "ADD TOPPINGS"
1 => 2618
2 => "Pepperoni"
]
]
12 => array:1 [▼
0 => array:3 [▼
0 => "TELL US IF YOU'LL NEED"
1 => 2618
2 => "Napkins"
]
]
]
I Would Like To Get The First Element Of This Array And Put In New Same Array Output
One Requirement: It Cannot Be Done With Passing By reference Index eg 0
This Input Array
[ 'id','ID','dt-text' ] ,
[ 'name','Name','dt-text' ] ,
[ 'artistList'=>['list','mm','defalut'] ,'Artist List','dt-select'] ,
[ 'nationality'=>['nationality','mm','defalut'] ,'Nationality','dt-select'] ,
[ 'view','View',''],
[ 'status','Status' ,'']
array:6 [▼
0 => array:3 [▼
0 => "id"
1 => "ID"
2 => "dt-text"
]
1 => array:3 [▼
0 => "name"
1 => "Name"
2 => "dt-text"
]
2 => array:3 [▼
"artistList" => array:3 [▼
0 => "list"
1 => "mm"
2 => "defalut"
]
0 => "Artist List"
1 => "dt-select"
]
3 => array:3 [▼
"nationality" => array:3 [▼
0 => "nationality"
1 => "mm"
2 => "defalut"
]
0 => "Nationality"
1 => "dt-select"
]
4 => array:3 [▼
0 => "view"
1 => "View"
2 => ""
]
5 => array:3 [▼
0 => "status"
1 => "Status"
2 => ""
]
]
The New Array I Needed
This IS OutPUT Array
['id','name','artistList'=>['list','mm','defalut'] ,'nationality'=>['nationality','mm','defalut'] ,'view','status']
array:6 [▼
0 => "id"
1 => "name"
"artistList" => array:3 [▼
0 => "list"
1 => "mm"
2 => "defalut"
]
"nationality" => array:3 [▼
0 => "nationality"
1 => "mm"
2 => "defalut"
]
2 => "view"
3 => "status"
]
Note
I Can Controll in Input Array Same , I Try with foreach in php And Tray In Laravel Helper Function head Put I get S
array:6 [▼
0 => "id"
1 => "name"
2 => array:1 [▼
"artistList" => array:3 [▼
0 => "list"
1 => "mm"
2 => "defalut"
]
]
3 => array:1 [▼
"nationality" => array:3 [▼
0 => "nationality"
1 => "mm"
2 => "defalut"
]
]
4 => "view"
5 => "status"
]
Put I Cant Get Resslut So , How Can I Do this?
Since you are changing the keys (structure) of the array, there is no way to do that without either generating a new array or passing the array by reference. One way to do it by generating a new array is with array_reduce:
$array = [
[ 'id','ID','dt-text' ] ,
[ 'name','Name','dt-text' ] ,
[ 'artistList'=>['list','mm','defalut'] ,'Artist List','dt-select'] ,
[ 'nationality'=>['nationality','mm','defalut'] ,'Nationality','dt-select'] ,
[ 'view','View',''],
[ 'status','Status' ,'']
];
$array = array_reduce($array, function ($c, $v) {
$first_key = array_keys($v)[0];
return array_merge($c, array($first_key => $v[$first_key])); }, []);
print_r($array);
Output:
Array (
[0] => id
[1] => name
[artistList] => Array (
[0] => list
[1] => mm
[2] => defalut
)
[nationality] => Array (
[0] => nationality
[1] => mm
[2] => defalut
)
[2] => view
[3] => status
)
Demo on 3v4l.org
This question already has answers here:
Merge rows of data from two 2D arrays (each with a shared and a unique column) based on the shared column value
(3 answers)
Closed 5 months ago.
I wish you could help me ...
I have 2 arrays, which I would like to insert into a 1array, by new_date to which if there is no data is data = '0', if there is no data1 is data1 = '0'.
Sorry if I do not know how to explain it well, I gave a small example. I have already tried array_merge (but everything is separate) and array_combine (it gives an error of Both parameters should have an equal number of elements).
Thank you in advance for all the help you can give ...
array1 = array:5 [▼
0 => array:2 [▼
"data" => 118
"new_date" => "06-2017"
]
1 => array:2 [▼
"data" => 263
"new_date" => "07-2017"
]
2 => array:2 [▼
"data" => 264
"new_date" => "08-2017"
]
3 => array:2 [▼
"data" => 266
"new_date" => "09-2017"
]
4 => array:2 [▼
"data" => 306
"new_date" => "10-2017"
]
5 => array:2 [▼
"data" => 100
"new_date" => "11-2017"
]
array2 = array:6 [▼
0 => array:2 [▼
"data1" => 100
"new_date" => "02-2016"
]
1 => array:2 [▼
"data1" => 170
"new_date" => "06-2017"
]
2 => array:2 [▼
"data1" => 354
"new_date" => "07-2017"
]
3 => array:2 [▼
"data1" => 397
"new_date" => "08-2017"
]
4 => array:2 [▼
"data1" => 421
"new_date" => "09-2017"
]
5 => array:2 [▼
"data1" => 531
"new_date" => "10-2017"
]
Exemple:
array3 = array:7 [▼
0 => array:3 [▼
"data1" => 111
"data" => 0
"new_date" => "02-2016"
]
1 => array:3 [▼
"data1" => 170
"data" => 118
"new_date" => "06-2017"
]
2 => array:3 [▼
"data1" => 354
"data" => 263
"new_date" => "07-2017"
]
3 => array:3 [▼
"data1" => 397
"data" => 264
"new_date" => "08-2017"
]
4 => array:3 [▼
"data1" => 421
"data" => 266
"new_date" => "09-2017"
]
5 => array:3 [▼
"data1" => 531
"data" => 306
"new_date" => "10-2017"
]
6 => array:3 [▼
"data1" => 0
"data" => 100
"new_date" => "11-2017"
]
Use array_combine to set the new_date as keys. Then add the first array element the d1 (as "data1" in your example) with array_map. Finely, loop on second array and add d1 is exist and all the rest with d ("data" in your example) as 0 if not.
You can do it like this:
$a1 = array(["d"=>1, "new_date"=> "06-2017"],["d"=>2, "new_date"=> "02-2016"]);
$a2 = array(["d1"=>3, "new_date"=> "06-2017"],["d1"=>4, "new_date"=> "07-2017"]);
$a1 = array_combine(array_column($a1, "new_date"), $a1);
$a2 = array_combine(array_column($a2, "new_date"), $a2);
// adding default d1 as 0
$a1 = array_map(function ($e) {return array_merge($e, ["d1" => 0]);},$a1);
foreach($a2 as $k => $v) {
if (isset($a1[$k]))
$a1[$k]["d1"] = $v["d1"]; // if new_data exist set only d1
else
$a1[$k] = array_merge($v, ["d" => 0]); //add with d as 0
}
Your result will be in $a1
I have the following arrays:
array:2 [▼
0 => array:2 [▼
"id" => 3
"total" => 2
]
1 => array:2 [▼
"id" => 4
"total" => 1
]
]
and
array:2 [▼
0 => array:2 [▼
"id" => 3
"total" => 5
]
1 => array:2 [▼
"id" => 4
"total" => 5
]
2 => array:2 [▼
"id" => 5
"total" => 2
]
]
I need to merge them together, keeping ids and summing the results, so I would get the resulting array as:
array:2 [▼
0 => array:2 [▼
"id" => 3
"total" => 7
]
1 => array:2 [▼
"id" => 4
"total" => 6
]
2 => array:2 [▼
"id" => 5
"total" => 2
]
]
These arrays come from a laravel database query using the toArray() method, so answers containing laravel default collection methods are welcome too.
try this
arr3 = arr1->merge(arr2);
arr3->map(function(itemM)use(arr1, arr2){
return itemM->total = arr1->sum(function(itemS)use(itemM){
return itemS->id == itemM->id ? itemS->total : 0;
}) +
arr2->sum(function(itemS)use(itemM){
return itemS->id == itemM->id ? itemS->total : 0;
});
})