Array ( [kanye] => Array ( [0] => Kanya [1] => Janaye [2] => Kayne [3] => Kane [4] => Kaye ) [wst] => Array ( [0] => ST [1] => St [2] => st [3] => EST [4] => West ) )
Array
(
[0] => Kanya
[1] => Janaye
[2] => Kayne
[3] => Kane
[4] => Kaye
)
Array
(
[0] => ST
[1] => St
[2] => st
[3] => EST
[4] => West
)
I've got those two arrays inside one array. The top array holds them both, then below is each one individually. When I am displaying the individual arrays, how do I echo their name?
So the first would be kanye, then list the contents, etc.
Hope that makes sense. I know it will be a simple bit of code but it's stumping me.
You can use a foreach statement to get the key value pair of the array:
$outer_arr = array('kanye' => array('Kanya', 'Janaye', 'Kayne', 'Kane'));
foreach($outer_arr as $key => $val) {
print($key); // "kanye"
print_r($val); // Array ( [0] => Kanya [1] => Janaye [2] => Kayne [3] => Kane )
}
If you just need to get the keys, you can use array_keys
$myArray = array(
"Kanye" => array("Kane", ...)
"West" => array("Wst", ...)
);
print_r(array_keys($myArray));
/*
array (
0 => Kanye
1 => West
)
*/
How about just print_r on the outer array?
Related
I'm working on a php issue with an associative array and attempting to sort it. What I have looks something like this:
[2021-07-16T10:45:23-04:00] => Array
(
[0] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
[1] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Apples
[2] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[3] => 0.0.0.111|83b5ed42d2593aa37ad8c428e4f76288|Oranges
)
[2021-07-16T10:45:24-04:00] => Array
(
[0] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
[1] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
[2] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[3] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[4] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Oranges
[5] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Apples
[6] => 0.0.0.111|83b5ed42d2593aa37ad8c428e4f76288|Apples
)
I want to sort it so it looks like this:
[2021-07-16T10:45:23-04:00] => Array
(
[0] => 0.0.0.111|83b5ed42d2593aa37ad8c428e4f76288|Oranges
[1] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Apples
[2] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[3] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
)
[2021-07-16T10:45:24-04:00] => Array
(
[0] => 0.0.0.111|83b5ed42d2593aa37ad8c428e4f76288|Apples
[1] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[2] => 0.0.1.177|278670a3934717e4c005e02b9a4c1bab|Apples
[3] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Oranges
[4] => 0.0.0.133|631dad007000b9ed59d41653176ac04b|Apples
[5] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
[6] => 0.0.1.222|ed7e434b79e54834440101fc07cc0981Apples
)
I've thought about exploding along the | and then taking the 0.0.0.111 and comparing it to everything else. What I tried look like this:
foreach ($test_array as $info) {
asort($info);
}
I realized though that I comparing the whole: 0.0.1.222|ed7e434b79e54834440101fc07cc0981|Apples
instead of the first part 0.0.1.222. Thank you for any help.
Try array_map('sort', $yourMainArray); or run your own callback on the map or even a simple loop and sort would do it.
I have an arbitrary number of arrays all containing the same format of data. There are 2 separate for loops looping through two separate SQL query results and adding them to 2 separate arrays.
Once I have all the information in both arrays, I am walking through them and joining them together to make a longer array.
However, as I am writing this array to a csv file, The information needs to be in order in the array so it writes it in order to the csv file. How can I do this?
Array 1
[1] => Array
(
[0] => 2017-07-21 00:00:00
[1] => Foo
[2] => Bar
[3] => 32.63
[4] => 18.36
[5] => 98.46
)
[2] => Array
(
[0] => 2017-07-21 00:00:00
[1] => Foo
[2] => Bar
[3] => 29.74
[4] => 148.68
[5] => 178.42
)
//etc
Array 2
[1] => Array
(
[0] => RTGH707321222
[1] => THIS
[2] => IS
[3] => TEXT
)
[2] => Array
(
[0] => RTGH707321220
[1] => SOME
[2] => WORDS
[3] => HERE
)
//etc
Joining the arrays together
array_walk($array2, function($values, $key) use (&$array1) {
$array1[$key] = array_merge($array1[$key], $values);
} );
After The array Merge - print_r($array1)
[1] => Array
(
[0] => 2017-07-21 00:00:00
[1] => Foo
[2] => Bar
[3] => 32.63
[4] => 18.36
[5] => 98.46
[6] => RTGH707321222
[7] => THIS
[8] => IS
[9] => TEXT
)
[2] => Array
(
[0] => 2017-07-21 00:00:00
[1] => Foo
[2] => Bar
[3] => 29.74
[4] => 148.68
[5] => 178.42
[6] => RTGH707321220
[7] => SOME
[8] => WORDS
[9] => HERE
)
//etc
So this is working fine. However, I would like to move some of these indexes around so that they are in a different order. I have looked into array_splice() but I am not sure if this is the correct method to use.
What I want it to look like
[1] => Array
(
[0] => 2017-07-21 00:00:00
[1] => RTGH707321222
[2] => TEXT
[3] => THIS
[4] => 18.36
[5] => 98.46
[6] => Foo
[7] => 32.63
[8] => IS
[9] => Bar
)
//etc
As you can see, all the information is still the same. The values have just been moved to different indexes. How can I sort the array so that it looks like the above. Can anyone point me in the right direction? Thanks.
This is a simpler method using array_replace() and an ordering array.
No extra loop, no temporary swapping variables.
Code: (Demo)
$array1=[
1=>['2017-07-21 00:00:00','Foo','Bar',32.63,18.36,98.46],
2=>['2017-07-21 00:00:00','Foo','Bar',29.74,148.68,178.42]
];
$array2=[
1=>['RTGH707321222','THIS','IS','TEXT'],
2=>['RTGH707321220','SOME','WORDS','HERE']
];
$order=[0=>'',6=>'',9=>'',7=>'',4=>'',5=>'',1=>'',3=>'',8=>'',2=>''];
array_walk($array2, function($values, $key) use (&$array1,$order) {
$array1[$key] = array_replace($order,array_merge($array1[$key], $values));
});
var_export($array1);
we can use swap technice here like,
<?php
foreach ($arr as $key => $value) {
$swap = $value[1];
$arr[$key][1] = $value[6];
$arr[$key][6] = $swap;
$swap = $value[9];
$arr[$key][9] = $value[2];
$arr[$key][2] = $swap;
$swap = $value[7];
$arr[$key][7] = $value[3];
$arr[$key][3] = $swap;
}
print_r($arr);
?>
$arr is your array.
This is my array () ...not much English'm using google translator.
I'm printing this array with print_r (). but what I deceo is sort of form this down
Array
(
[0] => Array
(
[0] => 606125999550609
[1] => Patricia
[2] => Michelle
)
[1] => Array
(
[0] => 724417787635260
[1] => Nasshy
[2] => Green
)
[2] => Array
(
[0] => 1121064174618668
[1] => Luisanna
[2] => Rodriguez
)
[3] => Array
(
[0] => 1057585894278115
[1] => Libane
[2] => Heredia
)
)
Basically what I need is to sort this array as follows......
So I do not know how to sort follows in PHP...
Array
(
[0] => 606125999550609
[1] => 724417787635260
[2] => 1121064174618668
[3] => 1057585894278115
[4] => Patricia
[5] => Nasshy
[6] => Luisanna
[7] => Libane
[8] => Michelle
[9] => Green
[10] => Rodriguez
[11] => Heredia
)
This isn't so much "sorting", its' more of a manipulation/restructure. Using a loop to regenerate your array would be the option, but if you can modify the data from where it comes from, then that's always recommended.
$new = array();
array_map(function($obj) use(&$new) {
foreach($obj as $i => $elem) {
$new[$i][] = $elem;
}
}, $array);
In the example above, we're using array_map() to apply our function() {... that runs the loop of each element, applying it to our $new array.
All you need to do is pass your $array in as you see above.
Example/Demo
I want to break down an multidimensional array into further single arrays.
Here is my array display..
Array
(
[family] => opensans
[variants] => Array
(
[0] => 300
[1] => 300italic
[2] => regular
[3] => italic
[4] => 600
[5] => 600italic
)
[subsets] => Array
(
[0] => cyrillic-ext
[1] => vietnamese
[2] => greek-ext
[3] => greek
[4] => cyrillic
[5] => latin-ext
[6] => latin
)
)
I want family/variants/subsets in different arrays so please help me.
Thanks in advance.
This sounds to simple but if that is your complete array all you need to do is
Assuming your big array is called $bigArray
$family = $bigArray['family'];
$variants = $bigArray['variants'];
$subsets = $bigArray['subsets'];
echo $family;
print_r($variants);
print_r($subsets);
$family of course will not be an array as $bigArray['family'] is not an array so $family will just be a string.
Try to use dynamic variables(php.net):
foreach ($array as $newVar => $newData) {
$$newVar = $newData;
}
var_dump($family);
var_dump($variants);
var_dump($subsets);
Let say that your array of
Array
(
[family] => opensans
[variants] => Array
(
[0] => 300
[1] => 300italic
[2] => regular
[3] => italic
[4] => 600
[5] => 600italic
)
[subsets] => Array
(
[0] => cyrillic-ext
[1] => vietnamese
[2] => greek-ext
[3] => greek
[4] => cyrillic
[5] => latin-ext
[6] => latin
)
)
is stored in a variable $myArr
You then need to do this.
foreach($myArr as $key => $value):
${key} = $value;
endforeach;
Should give you 3 arrays stored as $family, variants & subsets. Not sure about family, is that a string? in which case it will be string again unless you force it as a array.
My simple loop takes a list of coordinates and placenames, such as this:
(59.436961) (24.753575) (Revel, Estonia) (Born)
(-34.847745) (138.507362) (Port Adelaide) (Disembarked)
(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)
It preg_splits them into the array $coords, which works great. I then iterate through them in a foreach loop. My question is why does this:
foreach ($coords as &$marker){
$marker = preg_split('/\\) \\(|\\(|\\)/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($coords);
Result in this:
Array
(
[0] => Array
(
[0] => 59.436961
[1] => 24.753575
[2] => Revel, Estonia
[3] => Born
)
[1] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
[2] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
)
(Note that elements [1] and [2] are identical) - but this:
foreach ($coords as $marker){
$marker_array[] = preg_split('/\\) \\(|\\(|\\)/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($marker_array);
Result in this:
Array
(
[0] => Array
(
[0] => 59.436961
[1] => 24.753575
[2] => Revel, Estonia
[3] => Born
)
[1] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
[2] => Array
(
[0] => -33.177085
[1] => 138.010057
[2] => Port Pirie
[3] => Residence before enlistment
)
)
Is there something I'm doing wrong, or don't know about, when I attempt to modify elements directly in the loop?
In PHP 5.6 I do not see the described behaviour. How do you parse the raw list?
When I run:
<?php
$coords = array('(59.436961) (24.753575) (Revel, Estonia) (Born)',
'(-34.847745) (138.507362) (Port Adelaide) (Disembarked)',
'(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)');
foreach ($coords as &$marker){
$marker = preg_split('/\\) \\(|\\(|\\)/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($d);
it gives me this:
Array
(
[0] => Array
(
[0] => 59.436961
[1] => 24.753575
[2] => Revel, Estonia
[3] => Born
)
[1] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
[2] => Array
(
[0] => -33.177085
[1] => 138.010057
[2] => Port Pirie
[3] => Residence before enlistment
)
)
But I wouldn't recoomend using this crazy construction!
If you parse it from text, then simply use preg_match_all with pattern something like this:
'~\(()\)\s*\(()\)\s*\(()\)\s*\(()\)~mu'
Even if you have data in array, I highly recommned that you use preg_match for predictable data matching indstead of preg_split for this purpose. But noone becamed master at day one...