Loop through Multidimensional array and update mysql table using codeignitor 3 - php

I am trying to loop through multidimensional array to update the values in mysql table in codeignitor 3
I have an issue in looping through the values in multidimensional array
Below is my Multidimensional array:
$data = array(
'invoice_id' => $invoice_id,
'date' => $this->input->post('date',true),
'commercial_invoice_number' => $this->input->post('commercial_invoice_number',true),
'payment_type' => $this->input->post('payment_type',true)
);
When printing this array ,$data contains as below
(
[invoice_id] => Array
(
[0] => 4549344712
[1] => 4549344713
[2] => 4549344814
)
[date] => Array
(
[0] => 25-11-2022
[1] => 22-12-2022
[2] => 12-10-2022
)
[commercial_invoice_number] => Array
(
[0] => NS202211-4
[1] => NS202211-5
[2] => NS202211-6
)
[payment_type] => Array
(
[0] => 0
[1] => 1
[2] => 0
)
)
print_r($invoice_id) returns as below
Array ( [0] => 4549344712 [1] => 4549344713 [2] => 4549344814 )
foreach ($invoice_id as $value) {
$this->db->where('invoice_id', $value);
$this->db->update('invoice', $data);
echo $this->db->last_query();
}
The above code giving me Array to String conversion error.

Related

How to save an multidimensional array to database as separate rows in codeigniter?

Array
(
[daterange] => Array
(
[0] => 14/02/2017 - 14/02/2017
[1] => 14/02/2017 - 14/02/2017
)
[location] => Array
(
[0] => dggfd
[1] => hyd
)
[latitude] => Array
(
[0] => 3545
[1] => 111111
)
[longitude] => Array
(
[0] => 43545
[1] => 222222
)
)
zeroth index as one row and 1 index as another row .
Support your array name is $arr then do this:
$size = sizeof($arr['daterange']);
for($i=0;$i<$size;$i++) {
$data = array(
'daterange' => $arr['daterange'][$i],
'location' => $arr['location'][$i],
'latitude' => $arr['latitude'][$i],
'longitude' => $arr['longitude'][$i],
);
$this->db->insert('table_name',$data);
}
Hope this will help you. Leave the comment if you have any doubts.

how to find difference in single dimensional array with single dimensional array in php

I have two array two array. First is multidimensional and other is single dimensional. I want to find difference between them. How do I found.
$arrayresult
Array 1
Array (
[0] => Array ( [0] => ishani.lad [1] => 9033187384 )
[1] => Array ( [0] => rajkumar.prajapati [1] => 8460078459 )
[2] => Array ( [0] => lokesh.bhandari [1] => 9687060900 )
[3] => Array ( [0] => shishanshu.rai [1] => 8401915337 )
[4] => Array ( [0] => vishal.dake [1] => 9879815299 )
[5] => Array ( [0] => mohsin [1] => 8347163123 )
)
$useduser
Array 2
Array (
[0] => ishani.lad
[1] => rajkumar.prajapati
[2] => lokesh.bhandari
)
I need difference as result as below
Result
Array (
[0] => Array ( [0] => shishanshu.rai [1] => 8401915337 )
[1] => Array ( [0] => vishal.dake [1] => 9879815299 )
[2] => Array ( [0] => mohsin [1] => 8347163123 )
)
I have used solution as
$resultremainig = [];
foreach($arrayresult as $val2){
if(!in_array($val2[0], $useduser)){
echo $val2[0]."<br>";
$resultremainig[] = $val2;
}
}
But it show last record also. Result of above code is as below. It always show me last record in second array's also
Array (
[0] => Array ( [0] => lokesh.bhandari [1] => 9687060900 )
[1] => Array ( [0] => shishanshu.rai [1] => 8401915337 )
[2] => Array ( [0] => vishal.dake [1] => 9879815299 )
[3] => Array ( [0] => mohsin [1] => 8347163123 )
)
If you wanted you could try using nested loops like so:
<?php
$arrOne = $arrFinal = [
["ishani.lad", 9033187384],
["rajkumar.prajapati", 8460078459],
["lokesh.bhandari" , 9687060900],
["shishanshu.rai" , 8401915337],
["vishal.dake" , 9879815299],
["mohsin" , 8347163123],
];
$arrTwo = [
"ishani.lad",
"rajkumar.prajapati",
"lokesh.bhandari",
];
foreach($arrOne as $key=>$item){
foreach($arrTwo as $k=>$v){
if(in_array($v, $item)){
unset($arrFinal[$key]);
}
}
}
var_dump($arrFinal);
// PRODUCES:::
array (size=3)
3 =>
array (size=2)
0 => string 'shishanshu.rai' (length=14)
1 => int 8401915337
4 =>
array (size=2)
0 => string 'vishal.dake' (length=11)
1 => int 9879815299
5 =>
array (size=2)
0 => string 'mohsin' (length=6)
1 => int 8347163123
You could use array_filter():
$output = array_filter($arrayresult, function($a) use ($useduser) {
return !in_array($a[0], $useduser);
});
Hi You can also try this
$one = array(array('ishani.lad',9033187384),array('rajkumar.prajapati',8460078459),array('lokesh.bhandari',9687060900),array('shishanshu.rai',8401915337),array('vishal.dake',9879815299),array('mohsin',8347163123));
$two = array('ishani.lad','rajkumar.prajapati','lokesh.bhandari');
foreach($one as $array){
if(!in_array($array[0],$two)){
$final[] = $array;
}
}
echo "<pre>";print_r($final);
Output
Array
(
[0] => Array
(
[0] => shishanshu.rai
[1] => 8401915337
)
[1] => Array
(
[0] => vishal.dake
[1] => 9879815299
)
[2] => Array
(
[0] => mohsin
[1] => 8347163123
)
)
Trim the value before checking in $useduser array
$resultremainig = [];
foreach($arrayresult as $val2){
// this removes any extra spaces from the search string
if(!in_array(trim($val2[0]), $useduser)){
echo $val2[0]."<br>";
$resultremainig[] = $val2;
}
You need to use the array_diff function.
Store your 2 arrays in variables and compare them.

Convert a string with multiple values and merge the data with same keys

Below is the string that am getting by submitting a form.
qcl[]=25.17.74&qcl[]=25.20.105&qcr[]=24.01&qcr[]=24.01
How do i convert the string to Array so that i get the array in the below format.
Array( [qcl] => 25.17.74 [qcl] => 25.20.105 ) and Array( [qcr] => 24.01 [qcr] => 24.01 )
I tried exploding array with & and then exploding by = but i eneded up with this array.
Array
(
[0] => Array
(
[0] => qcl[]
[1] => 25.17.74
)
[1] => Array
(
[0] => qcl[]
[1] => 25.20.105
)
[2] => Array
(
[0] => qcr[]
[1] => 24.01
)
[3] => Array
(
[0] => qcr[]
[1] => 24.02
)
)
Please help me further.
Use parse_str()
parse_str("qcl[]=25.17.74&qcl[]=25.20.105&qcr[]=24.01&qcr[]=24.01");
print_r($qcl);
print_r($qcr);
Output
// QCL
Array (
[0] => 25.17.74
[1] => 25.20.105
)
// QCR
Array (
[0] => 24.01
[1] => 24.01
)
DEMO

How can I flip an array when each value is also an array?

How would I go about flipping an array and establishing relationships between all the values and keys? For example:
I am trying to turn this:
Array (
[11913] => Array (
[0] => 4242
[1] => 3981
)
[9878] => Array (
[0] => 2901
[1] => 3981
)
[11506] => Array (
[0] => 3981
[1] => 2901
)
)
Into this:
Array (
[3981] => Array (
[0] => 11506
[1] => 9878
[2] => 11913
)
[2901] => Array (
[0] => 11506
[1] => 9878
)
[4242] => Array (
[0] => 11913
)
)
Are there any PHP functions that will already do this automatically? If not what would be a way of going about this? Can't seem to wrap my head around it.
Here you go.
$final_array = array();
foreach($initial_array as $key => $val){
foreach($val as $v){
$final_array[$v][] = $key;
}
}

How do i merge the arrays in a particular format?

I have following arrays:
1) for total placed
Array
(
[0] => Array
(
[centers] => Array
(
[name] => delhi
[id] => 1
)
[0] => Array
(
[totalplaced] => 8
)
)
[1] => Array
(
[centers] => Array
(
[name] => mumbai
[id] => 2
)
[0] => Array
(
[totalplaced] => 1
)
)
)
2) for total working
Array
(
[0] => Array
(
[centers] => Array
(
[name] => delhi
[id] => 1
)
[0] => Array
(
[totalworking] => 4
)
)
[1] => Array
(
[centers] => Array
(
[name] => mumbai
[id] => 2
)
[0] => Array
(
[totalworking] => 1
)
)
)
3) for total trained
Array
(
[0] => Array
(
[centers] => Array
(
[name] => delhi
[id] => 1
)
[0] => Array
(
[totaltrained] => 8
)
)
[1] => Array
(
[centers] => Array
(
[name] => mumbai
[id] => 2
)
[0] => Array
(
[totaltrained] => 1
)
)
)
I wanted to merge these arrays so that the resultant array should look like this
[newarray] => Array(
[0] => Array (
[centers] => Array
(
[name] => delhi
[id] => 1
[totalplaced] => 8
[totalworking] => 4
[totaltrained] => 8
)
)
[1]=> Array(
[centers] => Array
(
[name] => mumbai
[id] => 2
[totalplaced] => 1
[totalworking] => 1
[totaltrained] => 1
)
)
)
This is the tabular representation of the above data which i want to display
centername totalplaced totalworking totaltrained
delhi 8 4 8
mumbai 1 1 1
Please help me on this.
Thanks
Pankaj Khurana
The difficulty here is that PHP's functions such as array_merge() and array_merge_recursive() will not merge data into numeric keys, but rather will re-key any duplicate numeric key. So for example given two arrays:
array(
'test' => 'abc',
0 => 'xyz'
);
array(
'test' => 'def',
0 => 'uvw'
);
Merging them together with array_merge() will produce an array like:
array(
'test' => 'def',
0 => 'xyz',
1 => 'uvw'
);
So, you need a custom function to be "additive" on any key, regardless of whether it is a string or numeric key. Try this:
function mixed_key_array_merge() {
$args = func_get_args();
$result = array();
foreach ($args as $arg) {
// discard non-array arguments; maybe this could be better handled
if (!is_array($arg)) {
continue;
}
foreach ($arg as $key => $value) {
if (!isset($result[$key])) {
$result[$key] = $value;
} else if (is_array($result[$key])) {
$result[$key] = call_user_func_array('mixed_key_array_merge',array($result[$key],$value));
}
}
}
return $result;
}

Categories