How to combine arrays in php? - php

I have these arrays:
$array1
Array
(
[0] => Array
(
[state] => AE
[state_pri] => 0
)
[1] => Array
(
[state] => AK
[state_pri] => 0
)
[2] => Array
(
[state] => AL
[state_pri] => 0
)
)
$array2
Array
(
[0] => Array
(
[0] => Array
(
[count1] => 0
)
)
[1] => Array
(
[0] => Array
(
[count1] => 1
)
)
[2] => Array
(
[0] => Array
(
[count1] => 18
)
)
)
$array3
Array
(
[0] => Array
(
[0] => Array
(
[count] => 0
)
)
[1] => Array
(
[0] => Array
(
[count] => 1
)
)
[2] => Array
(
[0] => Array
(
[count] => 18
)
)
)
...and I would like to get something like this:
Array
(
[0] => Array
(
[state] => AE
[state_pri] => 0
[0] => Array
(
[count] => 0
)
[0] => Array
(
[count1] => 0
)
)
[1] => Array
(
[state] => AK
[state_pri] => 0
[1] => Array
(
[count] => 0
)
[1] => Array
(
[count1] => 0
)
)
[2] => Array
(
[state] => AL
[state_pri] => 0
[2] => Array
(
[count] => 0
)
[2] => Array
(
[count1] => 0
)
)
)
Any ideas on how to do this?
Edit: Just to add some more code, if I use array_merge I get:
Array
(
[0] => Array
(
[state] => AE
[state_pri] => 0
)
[1] => Array
(
[state] => AK
[state_pri] => 0
)
[2] => Array
(
[state] => AL
[state_pri] => 0
)
[3] => Array
(
[0] => Array
(
[count] => 0
)
)
[4] => Array
(
[0] => Array
(
[count] => 1
)
)
[5] => Array
(
[0] => Array
(
[count] => 18
)
)
.....
)

What you're looking for is still a bit difficult to make out. Let me know if this achieves the desired results:
foreach ($array1 as $key => $val) {
$array1[$key][] = $array3[$key];
$array1[$key][] = $array2[$key];
}
print_r($array1);

What about the array_merge function?
http://www.php.net/manual/en/function.array-merge.php

$merged = array();
foreach (array($array1,$array2,$array3) as $array) {
foreach ($array as $key=>$value) {
if (!isset($merged[$key])) {
$merged[$key] = array();
}
$merged[$key] += $value;
}
}
print_r($merged);

$combined=$array0 + $array1;
Try that one

Related

php - Issue with extracting array values

I'm getting all the HTML post values in the $postdata variable.
$postdata = $this->input->post();
unset($postdata['submit']);
unset($postdata['valve_no']);
Output of $postdata:
Array (
[1] => Array (
[0] => BH123
[1] => H89
)
[2] => Array (
[0] => BH123
[1] => H89
)
[3] => Array (
[0] => BH123
[1] => H89
)
[4] => Array (
[0] => BH123
)
)
$valve_no=$this->input->post('valve_no');
Output of $valve_no:
Array (
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Next is I'm trying to merge both arrays
foreach($postdata as $key => $val)
{
$dataSet[] = array ('valve_no'=>$valve_no[$key-1],$postdata[$key]);
}
print_r($dataSet);
Output of $dataSet:
Array (
[0] => Array (
[valve_no] => 1
[0] => Array (
[0] => BH123
[1] => H89
)
)
[1] => Array (
[valve_no] => 2
[0] => Array (
[0] => BH123
[1] => H89
)
)
[2] => Array (
[valve_no] => 3
[0] => Array (
[0] => BH123
[1] => H89
)
)
[3] => Array (
[valve_no] => 4
[0] => Array (
[0] => BH123
)
)
)
The output I'm expecting is below:
Array (
[0] => Array (
[valve_no] => 1
[1] => BH123
[2] => H89
)
[1] => Array (
[valve_no] => 2
[1] => BH123
[2] => H89
)
[2] => Array (
[valve_no] => 3
[1] => BH123
[2] => H89
)
[3] => Array (
[valve_no] => 4
[1] => BH123
)
)
)
As you can see in the expected output I want to extract the sub-array and need to start with [1] instead of [0].
Thanks in advance.
Just change foreach() code like this: (As per your comment)
foreach($postdata as $key => $val)
{
$dataSet[$key-1]['valve_no'] = $valve_no[$key-1];
foreach($val as $k=>$v){
$dataSet[$key-1][$k+1] =$v;
}
}
print_r($dataSet);
Output: https://3v4l.org/P8NKs
Note: In case $postdata sub-array indexes not start with 0,1,2... and still you want them to start with 1,2,... in your result, then do like below:
foreach($postdata as $key => $val)
{
$dataSet[$key-1]['valve_no'] = $valve_no[$key-1];
$srNo = 1;
foreach($val as $v){
$dataSet[$key-1][$srNo] =$v;
$srNo++;
}
}
Output: https://3v4l.org/sLVv5

Compare values of two multidimentional array and insert if not exits

I have two array $array1 and $array2 which I get dynamically and look like
$array1 = Array
(
[0] => Array
(
[hour] => 10
[activity] => Array
(
[0] => Array
(
[activity_id] => 1
[cnt] => 2
)
[1] => Array
(
[activity_id] => 2
[cnt] => 1
)
)
)
[1] => Array
(
[hour] => 11
[activity] => Array
(
)
)
[2] => Array
(
[hour] => 12
[percentage] => 0
[activity] => Array
(
[0] => Array
(
[activity_id] => 2
[cnt] => 5
)
[1] => Array
(
[activity_id] => 3
[cnt] => 2
)
)
)
);
$array2 = Array
(
[0] => Array
(
[id] => 1
[name] => Phone Calls
[readable] => 1
[status] => active
)
[1] => Array
(
[id] => 2
[name] => Meeting With Customer
[readable] => 1
[status] => active
)
[2] => Array
(
[id] => 3
[name] => Others Works
[readable] => 1
[status] => active
)
);
which i need to compare.
if $array2['id'] is not in $array1["activity"](i.e"activity_id") add array ['activity_id'=>$array2['id'],'cnt'=>0] to $array1['activity'].
My result must be like
$result = Array
(
[0] => Array
(
[hour] => 10
[activity] => Array
(
[0] => Array
(
[activity_id] => 1
[cnt] => 2
)
[1] => Array
(
[activity_id] => 2
[cnt] => 1
)
[2] => Array
(
[activity_id] => 3
[cnt] => 0
)
)
)
[1] => Array
(
[hour] => 11
[activity] => Array
(
[0] => Array
(
[activity_id] => 1
[cnt] => 0
)
[1] => Array
(
[activity_id] => 2
[cnt] => 0
)
[2] => Array
(
[activity_id] => 3
[cnt] => 0
)
)
)
[2] => Array
(
[hour] => 12
[percentage] => 0
[activity] => Array
(
[0] => Array
(
[activity_id] => 1
[cnt] => 0
)
[1] => Array
(
[activity_id] => 2
[cnt] => 5
)
[2] => Array
(
[activity_id] => 3
[cnt] => 2
)
)
)
);
What i have tried is
$finalArray = array();
foreach($array1 as $arr1) {
foreach($array2 as $arr2) {
if(!in_array($arr2['id'], $arr1['activity'])) {
$array = ['activity_id'=>$arr2['id'], 'cnt'=>0];
}
array_push($arr1['activity'], $array);
unset($array);
}
array_push($finalArray, $result);
}
print_r($finalArray);
in_array() function is not working as I excepted or I am trying to do it in the wrong way. Can someone helps me with this?
Sorry,finally i get what i did wrong.May be someone get helped.
everything is ok just change the line
if(!in_array($arr2['id'], $arr1['activity'])) {
into
if(!in_array( $readActivity['id'], array_column($result['activity'],'activity_id'))){

Merge array with multiple keys (php)

The array below is my current situation. Through a loop new data get's added.
I've tried 'array_merge_recursive' as well as this this accepted answer. But it doesn't seem to work or I'm using it wrong.
Array (
[0] => Array (
[Customer] => Array (
[Weekend] => Array (
[2016] => Array (
[01] => Array (
[0] => Array (
[id] => 54
[startDate] => 01-01-2016
[endDate] => 31-12-2016
[price] => 0
)
)
)
)
)
)
[1] => Array (
[Customer] => Array (
[Weekend] => Array (
[2018] => Array (
[01] => Array (
[0] => Array (
[id] => 56
[startDate] => 01-01-2018
[endDate] => 31-12-2018
[price] => 0
)
)
)
)
)
)
[2] => Array (
[Customer] => Array (
[Weekend] => Array (
[2019] => Array (
[01] => Array (
[0] => Array (
[id] => 57
[startDate] => 01-01-2019
[endDate] => 31-12-2019
[price] => 0
)
)
)
)
)
)
)
Desired situation is something like this:
Array (
[Customer] => Array (
[Weekend] => Array (
[2016] => Array (
[01] => Array (
[0] => Array (
[id] => 54
[startDate] => 01-01-2016
[endDate] => 31-12-2016
[price] => 0
)
)
)
[2018] => Array (
[01] => Array (
[0] => Array (
[id] => 56
[startDate] => 01-01-2018
[endDate] => 31-12-2018
[price] => 0
)
)
)
[2019] => Array (
[01] => Array (
[0] => Array (
[id] => 57
[startDate] => 01-01-2019
[endDate] => 31-12-2019
[price] => 0
)
)
)
)
)
)
If any other information is required, please ask! new here
Pretty sure this will work:
$result = call_user_func_array('array_merge_recursive', $array);
This should do what you want:
$new_arr = [];
$arr = // Your current array;
foreach ($arr as $customer)
{
foreach ($customer['Weekend'] as $year => $z)
{
foreach($z as $month => $y)
{
foreach($y as $entry)
{
Store($year, $month, $entry, $new_arr);
}
}
}
}
function Store($year, $month, $entry, & $new_arr)
{
if ( ! isset($new_arr['customer'][$year]))
{
$new_arr['customer'][$year] = array();
}
if ( ! isset($new_arr['customer'][$year][$month]))
{
$new_arr['customer'][$year][$month] = array();
}
$new_arr['customer'][$year][$month][] = $entry;
}

Parse a multi dimensional array and pull values

How can i parse the below multi dimensional array ($array) and pull values of [productType] , [totalPrice]and [productCategory] if [packageCode] is matching with the value of $pkgcodes[1]...[z]
$pkgcodes is an array of codes
print_r of $pkgcodes
Array ( [0] => TRA1I2 [1] => TREZEC [n] ...)
The array $array is a response from SOAP client
print_r of $array
Array (
[0] => Array (
[packageCode] => TRA1I2
[totalPrice] => 17
[productType] => product Only
[products] => Array (
[0] => Array (
[productCategory] => Simple
[paxes] => Array (
[0] => Array (
[paxType] => Adult
[age] => 30 )
[1] => Array (
[paxType] => Adult
[age] => 30 ) )
[totalproductRate] => 17
[ratesPerNight] => Array (
[0] => Array (
[date] => 2015-01-28
[amount] => 17 ) ) ) ) )
[1] => Array (
[packageCode] => TREZEC
[totalPrice] => 17
[productType] => product Only
[products] => Array (
[0] => Array (
[productCategory] => Complicated
[paxes] => Array (
[0] => Array (
[paxType] => Adult
[age] => 30 )
[1] => Array (
[paxType] => Adult
[age] => 30 ) )
[totalproductRate] => 17
[ratesPerNight] => Array (
[0] => Array (
[date] => 2015-01-28
[amount] => 17 ) ) ) ) ) ).
You help is more appreciated
Try with -
$newArr = array();
foreach($array as $value) {
if (in_array($value['packageCode'], $pkgcodes)) {
$temp['productType'] = $value['productType'];
$temp['totalPrice'] = $value['totalPrice'];
$temp['packageCode'] = $value['packageCode'];
$temp['productCategory'] = $value['products']['productCategory'];
$newArr[] = $temp;
}
}
var_dump($newArr);

how to sort array in a different order

I have an array which looks like this.
Array
(
[0] => Array
(
[cartId] => 667
[isPack] => 1
)
[1] => Array
(
[cartId] => 668
[isPack] => 1
)
[2] => Array
(
[cartId] => 672
[isPack] => 2
)
[3] => Array
(
[cartId] => 673
[isPack] => 2
)
)
I want to make an array by isPack element,which should look something like this.
Array (
[1] => Array
(
[0] => Array
(
[cartId] => 667
)
[1] => Array
(
[cartId] => 668
)
)
[2] => Array
(
[0] => Array
(
[cartId] => 672
)
[1] => Array
(
[cartId] => 673
)
)
)
Array two will be two array in which isPack will be array key,and other information will belong to its subarray.
How can I do this?
thanks in advance :)
$new=array();
$arr = array( array('cartId' => 667,'isPack' => 1),array('cartId' => 668,'isPack' => 1),array('cartId' => 672,'isPack' => 2),array('cartId' => 673,'isPack' => 2));
for($i=0;$i<count($arr);$i++) {
$l = $arr[$i]['isPack'];
$new[$l][]['catid']= $arr[$i]['cartId'];
}
print_r($new);
and output:-
Array
(
[1] => Array
(
[0] => Array
(
[catid] => 667
)
[1] => Array
(
[catid] => 668
)
)
[2] => Array
(
[0] => Array
(
[catid] => 672
)
[1] => Array
(
[catid] => 673
)
)
)
Try with:
$input = array( /* your data*/ );
$output = array();
foreach ( $input as $data ) {
$isPack = $data['isPack'];
$cartId = $data['cartId'];
if ( !isset($output[$isPack]) ) {
$output[$isPack] = array();
}
$output[$isPack][] = array(
'cartId' => $cartId
);
}

Categories