shadd Posted September 4 Share Posted September 4 i have these two arrays: array(2) { [0]=> array(10) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" [5]=> string(1) "f" [6]=> string(1) "g" [7]=> string(1) "h" [8]=> string(1) "i" [9]=> string(1) "j" } [1]=> array(2) { [0]=> string(1) "a" [1]=> string(0) "" } } array(11) { [0]=> string(6) "1.1.51" [2]=> string(8) "1.1.51.2" [3]=> string(8) "1.1.51.3" [4]=> string(8) "1.1.51.4" [5]=> string(8) "1.1.51.5" [6]=> string(8) "1.1.51.6" [7]=> string(8) "1.1.51.7" [8]=> string(8) "1.1.51.8" [9]=> string(8) "1.1.51.9" [1]=> string(9) "1.1.51.10" [10]=> string(6) "1.1.52" } how can merge the corresponding values of array(11) to those of array(2).keeping in mind that 1.1.51-1.1.51.10 are for the first sub array in array(2) and 1.1.52 corresponds to the values of key 1 in array(2).And how can i display them? Quote Link to comment Share on other sites More sharing options...
requinix Posted September 4 Share Posted September 4 "Merge in order" how? What's the output you want to get? Spoiler: the answer is probably going to involve some combination of array_combine, array_slice, and/or array_merge. Quote Link to comment Share on other sites More sharing options...
shadd Posted September 4 Author Share Posted September 4 5 minutes ago, requinix said: "Merge in order" how? What's the output you want to get? Spoiler: the answer is probably going to involve some combination of array_combine, array_slice, and/or array_merge. i would like to map the values of array(2) in key 0 to those of array(11) from 1.1.51 to 1.1.51.10 so that i print out: 1.1.51,a 1.1.51.1,b . . . 1.1.51.10,j 1.1.52,a Quote Link to comment Share on other sites More sharing options...
requinix Posted September 4 Share Posted September 4 You can flatten the first array with array_merge and the ... operator. That gives you an array of size 11 and will keep the same ordering. Then use array_combine to create a new array using one of them for keys and the other for the values... is what I assume you want. Quote Link to comment Share on other sites More sharing options...
Barand Posted September 4 Share Posted September 4 Looks very much like this... https://forums.phpfreaks.com/topic/323782-how-to-loop-through-array/?do=findComment&comment=1634454 Quote Link to comment Share on other sites More sharing options...
Solution jodunno Posted September 5 Solution Share Posted September 5 23 hours ago, shadd said: how can merge the corresponding values of array(11) to those of array(2).keeping in mind that 1.1.51-1.1.51.10 are for the first sub array in array(2) and 1.1.52 corresponds to the values of key 1 in array(2).And how can i display them? again with these arrays? you'll never learn, eh? I think that array merge will fail you here with these demands and array combine will throw an error due to the key length mismatches. I can only guess that you are trying to preserve the order of array 11, id est, the key 1 not following 0. I also assume that you want the 10 key moved to array 2 1 key. This is really not how one should code arrays. I can only suggest bad coding practices in an attempt to solve your problem but i may not be understanding you correctly. Very vague. I have a way to mix the arrays but it is not professional coding methods by any stretch of the imagination. Yes i'm saying that the following code is bad. Meantime, the final key can be printed to the screen but outside of the loop. Inside of the loop would require an array count and a counter to find the end of the loop. <?php echo <<<RAYS <html> <head> <title></title> <style> div.raybox { display: block; position: static; width: 20em; height: 18em; vertical-align: top; background: #101010; border-radius: 8px; box-sizing: content-box; overflow: hidden; } div.ray { display: inline-block; position: relative; margin: 4px; padding: 4px; width: 9em; height: 94%; vertical-align: top; background: #000000; color: rgba(240, 240, 240, 0.6); box-sizing: content-box; } </style> </head> <body> RAYS; $aRay = (array) [0 => (array) [0 => "a", 1 => "b", 2 => "c", 3 => "d", 4 => "e", 5 => "f", 6 => "g", 7 => "h", 8 => "i", 9=> "j"], 1 => (array) [0 => "a", 1 => ""]]; $bRay = (array) [0 => "1.1.51", 2 => "1.1.51.2", 3 => "1.1.51.3", 4 => "1.1.51.4", 5 => "1.1.51.5", 6 => "1.1.51.6", 7 => "1.1.51.7", 8 => "1.1.51.8", 9 => "1.1.51.9", 1 => "1.1.51.10", 10 => "1.1.52"]; echo '<div class="raybox">'; echo '<div class="ray">aRay:<br>'; foreach ($aRay as $key => $array) { foreach ($array as $index => $value) { echo '[' . $key . '][' . $index . '] => ' . $value . '<br>'; } } echo '</div>'; echo '<div class="ray">bRay:<br>'; foreach ($bRay as $index => $value) { echo '[' . $index . '] => ' . $value . '<br>'; } echo '</div>'; echo '</div>'; $aRay[1][1] = array_pop($bRay); $stingRay = array (); array_push($stingRay, $bRay); array_push($stingRay, $aRay[0]); array_push($stingRay, $aRay[1]); //echo '<br>'; //print_r($stingRay); //echo '<br>'; //foreach ($stingRay as $key1 => $array) { // foreach ($array as $key2 => $value) { // echo $value . '<br>'; // } //} echo '<br>'; foreach ($stingRay[0] as $key => $value) { echo $value . ': '; echo $stingRay[1][$key] . '<br>'; } echo $stingRay[2][1] . ': ' . $stingRay[2][0]; echo <<<RAYS </body> </html> RAYS; ?> the output is what you are seeking, i think. Otherwise, i would say build a new array with array 11 values as keys in the new array. Then add array 2 values (letters) as values for the new array keys. Then add the last key value pair to the new array. Then you could loop over one array printing keys and values to obtain your objective. I'm ashamed to post this awful code but that is how twisted this concept is becoming. Really try to recode your project correctly and these problems disappear. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.