Php Put into new array one row of another multidimentional associative array - php

I have multidimensional associative array returned by a MYSQL table.
array { [0]=> array
{
["id"]=> string(8) "130"
["name"]=> string(7) "mike"
["nickname"]=> string(7) "raze"
}
[1]=> array
{
["id"]=> string(8) "120"
["name"]=> string(7) "jimmy"
["nickname"]=> string(5) "killer"
}
}
I would extract one row into another multidimensional associative array with the same structure.
After this, my new array should be:
array { [0]=> array
{
["id"]=> string(8) "120"
["name"]=> string(7) "jimmy"
["nickname"]=> string(5) "killer"
}
}
Anyone can help me ?
Thank you so much.

Related

Foreach through multidimensional array with dynamic/unknown dimensions

I'm trying to loop through a multidimensional array with foreach but sometimes there's 5 dimensions and sometimes there's 2, but I need to foreach every array. Here is an example:
array(16) {
["id"]=>
string(2) "1"
["name"]=>
string(1) "Bob"
["job"]=>
array(2) {
[0]=>
string(8) "software"
[1]=>
string(7) "plumber"
}
["kids"]=>
array(2) {
[1]=>
array(2) {
[0]=>
string(4) "Jane"
[1]=>
string(4) "girl"
}
[2]=>
array(2) {
[0]=>
string(3) "Sam"
[1]=>
string(4) "boy"
[2] => array(2) {
[0]=>
string(3) "123"
[1]=>
string(11) "Main Street"
}
}
}
}
you get the point.... but imagine if I had a dimension of 10 in the array. How can I dynamically loop through them and do trim() to each value in the whole array?
Here is what I have so far:
foreach ($array as $key => $value) {
$array[$key] = trim($value);
}
but I need it to go deeper into an array if there is an array and perform trim to all values in my $array.

How to loop through array of multiple arrays in php

I am trying to loop through array of arrays in php. Usually get stalked with complex array sometimes but I need your kind assistance with this.
var_dump($array) produced the array below:
$arrayVal = array(6) {
["item_id"]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
}
["request_explanation"]=>
array(2) {
[0]=>
string(7) "Welcome"
[1]=>
string(11) "Hello World"
}
["quantity"]=>
array(2) {
[0]=>
string(1) "4"
[1]=>
string(1) "4"
}
["unit_cost"]=>
array(2) {
[0]=>
string(1) "4"
[1]=>
string(1) "3"
}
["total_cost"]=>
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
}
["supporting_document"]=>
string(0) ""
}
My database table:
I want to be able to save each of the value in that array into the table above. Thanks for helping me.
Use the indexes of one of the sub-arrays to access all the other sub-arrays:
foreach ($array['item_id'] as $i => $item_id) {
$request_explanation = $array['request_explanation'][$i];
$quantity = $array['quantity'][$i];
// repeat this for all the columns
// Now you can insert all these variables into the database
}
Use a loop to build 2 separate arrays:
foreach($array['ExpensesList'] as $index => $val){
$array1[$index] = $array['ExpensesList'][$index][0];
$array2[$index] = $array['ExpensesList'][$index][1];
}
Then insert each array into your database individually.
This will not work if any sub array contains an index at 2, so this is explicitly for the example structure you provided.

array value inside array

Ok I did some searching and everything I saw involved loops, but I don't think it would really require on. I'm trying to get the 'href' value which appears to be within an array in the initial array:
Trying to access data in an array that has an embedded array how do I get [actions][href] ?:
["domains"]=>
array(1) {
[0]=>
array(5) {
["resource"]=>
string(96) "xxxx"
["name"]=>
string(34) "yyyy"
["type"]=>
string(9) "Blacklist"
["count"]=>
int(2672)
["actions"]=>
array(1) {
[0]=>
array(1) {
["download"]=>
array(2) {
["href"]=>
string(105) "WANT THIS VALUE"
["method"]=>
string(3) "GET"

Adding an extra row to a PHP array with new values

I have this array called $items. My CMS created this array with three products and I just did a var_dump with the results below.
array(3) { [0]=> array(11) { ["item_id"]=> string(4) "1320" ["name"]=> string(5) "ITEM_A" ["price"]=> string(6) "$5.00" }
[1]=> array(11) { ["item_id"]=> string(4) "1321" ["name"]=> string(5) "ITEM_B" ["price"]=> string(6) "$5.00" }
[2]=> array(11) { ["item_id"]=> string(4) "1323" ["name"]=> string(5) "ITEM_D" ["price"]=> string(6) "$5.00" }
}
Is there a way I can inject another item, "ITEM_C" into this array so that it's now
array(3) { [0]=> array(11) { ["item_id"]=> string(4) "1320" ["name"]=> string(5) "ITEM_A" ["price"]=> string(6) "$5.00" }
[1]=> array(11) { ["item_id"]=> string(4) "1321" ["name"]=> string(5) "ITEM_B" ["price"]=> string(6) "$5.00" }
[2]=> array(11) { ["item_id"]=> string(4) "1323" ["name"]=> string(5) "ITEM_D" ["price"]=> string(6) "$5.00" }
[3]=> array(11) { ["item_id"]=> string(4) "1322" ["name"]=> string(5) "ITEM_C" ["price"]=> string(6) "$5.00" }
}
and then sort it by "name"? I basically want to always add one new row to this array which will always have different names and then sort it by the name. When I do the foreach php command I don't want it to be in the order of ITEM_A, ITEM_B, ITEM_D, ITEM_C. It needs to be ITEM_A, ITEM_B, ITEM_C, ITEM_D.
Appending to an array in PHP is easy as $array[] :
$myArray = array(1,2,3);
$myArray[] = 4; //now array(1,2,3,4)
So to add to your existing array, first create your new array element
$element = array("item_id" => 1322, "name" => "ITEM_C", /*etc.*/);
Then add it your array
$myArray[] = $element;
As for sorting, there are various sort functions depending on your exact needs. Since you're sorting according to a given array key, you'll probably need to call usort with a given function.
function nameCompare($a, $b)
{
$a = $a["name"];
$b = $b["name"];
return strcmp($a, $b);
}
usort($myArray, 'nameCompare');

combine two array without foreach

I am making a mailing system, and my input is array of arrays, i need to combine them to one, i already aggregated based on the email.
input example:
array(2) {
[0]=>
array(15) {
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(6) "200122"
["email"]=>
string(21) "jon#gmail.com"
["content"]=>
string(34) "{"Notice":827,"co":3241,"Co":1555}"
}
[1]=>
array(15) {
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(6) "592024"
["email"]=>
string(21) "jon#gmail.com"
["content"]=>
string(97) "{"Co":388,"co":5564,"xml":2982,"CO":6,"Warning":1957,"warning":42,"Notice":13,"cO":9,"Connect":6}"
}
}
array(1) {
[0]=>
array(15) {
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(5) "19116"
["email"]=>
string(22) "kelly#gmail.com"
["content"]=>
string(8) "{"co":1}"
}
}
input array to the mail function should look like:
array(1) {
[0]=>
array(15) {
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(6) "200122"
["email"]=>
string(21) "jon#gmail.com"
["content"]=>
string(34) "{"Notice":827,"co":3241,"Co":1555}"
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(6) "592024"
["email"]=>
string(21) "jon#gmail.com"
["content"]=>
string(97) " {"Co":388,"co":5564,"xml":2982,"CO":6,"Warning":1957,"warning":42,"Notice":13,"cO":9,"Conne ct":6}"
}
}
array(1) {
[0]=>
array(15) {
["enabled"]=>
string(1) "1"
["file_size_bytes"]=>
string(5) "19116"
["email"]=>
string(22) "kelly#gmail.com"
["content"]=>
string(8) "{"co":1}"
}
}
its basically spouse to combine the two arrays that are in the same array.
how can i do that? thanks :)
The required outcome is not possible since you have duplicate keys in the array which won't be possible in PHP.
e.g.
["content"] => string(34) "{"Notice":827,"co":3241,"Co":1555}"
will be replaced by
["content"] => string(97) "{"Co":388,"co":5564,"xml":2982,"CO":6,"Warning":1957,"warning":42,"Notice":13,"cO":9,"Connect":6}"
You can do this simply using the array_merge function.
In their answer, Maarten suggests this is not possible because duplicate keys would be overwritten. However this only occurs when the keys aren't numeric. In your example above the keys of the first array are 0 and 1 and the second just 0. All numeric.
So all you need to do is:
array_merge($array1,$array2);

Categories