Can someone spot the error with this array? - php

I am populating an array with variables from a table.
For some reason, it doesn't like the indexes 08 or 09.
When I have
$numCorrectArray = array(01=>$q01TotalCorrect, 02=>$q02TotalCorrect, 03=>$q03TotalCorrect, 04=>$q04TotalCorrect, 05=>$q05TotalCorrect, 06=>$q06TotalCorrect, 07=>$q07TotalCorrect, 08=>$q08TotalCorrect, 09=>$q09TotalCorrect, 10=>$q10TotalCorrect, 11=>$q11TotalCorrect, 12=>$q12TotalCorrect, 13=>$q13TotalCorrect, 14=>$q14TotalCorrect, 15=>$q15TotalCorrect, 16=>$q16TotalCorrect, 17=>$q17TotalCorrect, 18=>$q18TotalCorrect, 19=>$q19TotalCorrect, 20=>$q20TotalCorrect, 21=>$q21TotalCorrect, 22=>$q22TotalCorrect, 23=>$q23TotalCorrect, 24=>$q24TotalCorrect, 25=>$q25TotalCorrect, 26=>$q26TotalCorrect, 27=>$q27TotalCorrect, 28=>$q28TotalCorrect, 29=>$q29TotalCorrect, 30=>$q30TotalCorrect, 31=>$q31TotalCorrect, 32=>$q32TotalCorrect, 33=>$q33TotalCorrect, 34=>$q34TotalCorrect, 35=>$q35TotalCorrect, 36=>$q36TotalCorrect, 37=>$q37TotalCorrect, 38=>$q38TotalCorrect, 39=>$q39TotalCorrect, 40=>$q40TotalCorrect);
print_r spits out
Array ( [1] => 60 [2] => 69 [3] => 38 [4] => 69 [5] => 70 [6] => 47 [7] => 39 [0] => 70 [10] => 56 [11] => 37 [12] => 32 [13] => 24 [14] => 48 [15] => 72 [16] => 65 [17] => 26 [18] => 50 [19] => 55 [20] => 36 [21] => 40 [22] => 49 [23] => 37 [24] => 33 [25] => 66 [26] => 64 [27] => 68 [28] => 54 [29] => 59 [30] => 25 [31] => 58 [32] => 58 [33] => 58 [34] => 48 [35] => 70 [36] => 51 [37] => 67 [38] => 54 [39] => 62 [40] => 45 )
Meanwhile, when I do
$numCorrectArray = array(01=>$q01TotalCorrect, 02=>$q02TotalCorrect, 03=>$q03TotalCorrect, 04=>$q04TotalCorrect, 05=>$q05TotalCorrect, 06=>$q06TotalCorrect, 07=>$q07TotalCorrect, 88=>$q08TotalCorrect, 99=>$q09TotalCorrect, 10=>$q10TotalCorrect, 11=>$q11TotalCorrect, 12=>$q12TotalCorrect, 13=>$q13TotalCorrect, 14=>$q14TotalCorrect, 15=>$q15TotalCorrect, 16=>$q16TotalCorrect, 17=>$q17TotalCorrect, 18=>$q18TotalCorrect, 19=>$q19TotalCorrect, 20=>$q20TotalCorrect, 21=>$q21TotalCorrect, 22=>$q22TotalCorrect, 23=>$q23TotalCorrect, 24=>$q24TotalCorrect, 25=>$q25TotalCorrect, 26=>$q26TotalCorrect, 27=>$q27TotalCorrect, 28=>$q28TotalCorrect, 29=>$q29TotalCorrect, 30=>$q30TotalCorrect, 31=>$q31TotalCorrect, 32=>$q32TotalCorrect, 33=>$q33TotalCorrect, 34=>$q34TotalCorrect, 35=>$q35TotalCorrect, 36=>$q36TotalCorrect, 37=>$q37TotalCorrect, 38=>$q38TotalCorrect, 39=>$q39TotalCorrect, 40=>$q40TotalCorrect);
print_r spits out
Array ( [1] => 60 [2] => 69 [3] => 38 [4] => 69 [5] => 70 [6] => 47 [7] => 39 [88] => 66 [99] => 70 [10] => 56 [11] => 37 [12] => 32 [13] => 24 [14] => 48 [15] => 72 [16] => 65 [17] => 26 [18] => 50 [19] => 55 [20] => 36 [21] => 40 [22] => 49 [23] => 37 [24] => 33 [25] => 66 [26] => 64 [27] => 68 [28] => 54 [29] => 59 [30] => 25 [31] => 58 [32] => 58 [33] => 58 [34] => 48 [35] => 70 [36] => 51 [37] => 67 [38] => 54 [39] => 62 [40] => 45 )
Notice how it handles keys 08 and 09 vs when I change them to 88 and 99 in the second example.
Can anyone spot what I am doing wrong?

Preppending a number with a 0 in PHP forces the number to be interpreted as an octal value. There is no 8 and 9 in octal notation.
Why not just use 1, 2, 3, etc? Or if you really need it to be two digits, use strings as key, i.e. '01', '02', '03'...

0... is octal numbers, there's no 08 or 09 so PHP treats them as 0.

Related

Generate random x numbers between the range of z and y in PHP [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 11 months ago.
Improve this question
Is there a way to generate 65 random number in an array between the numbers 24 - 51 in php. Thats just an example of what I'm trying to do. I keep finding just range of two number or picking one number but not generating 65 numbers, that will repeat, between a range of numbers.
to generate 65 random number in an array between the numbers 24 - 51 you may use for loop and mt_rand function.
$arr = [];
$n = 65;
$r_min = 24;
$r_max = 51;
for ($i = 1; $i <= $n; $i++) {
$arr[] = mt_rand($r_min, $r_max);
}
print_r($arr);
will print for example: (output will change every time of course)
Array
(
[0] => 50
[1] => 37
[2] => 44
[3] => 48
[4] => 31
[5] => 30
[6] => 29
[7] => 51
[8] => 34
[9] => 32
[10] => 41
[11] => 25
[12] => 41
[13] => 26
[14] => 51
[15] => 42
[16] => 31
[17] => 44
[18] => 51
[19] => 41
[20] => 25
[21] => 46
[22] => 26
[23] => 45
[24] => 26
[25] => 26
[26] => 26
[27] => 33
[28] => 32
[29] => 48
[30] => 29
[31] => 39
[32] => 46
[33] => 40
[34] => 25
[35] => 49
[36] => 51
[37] => 45
[38] => 49
[39] => 45
[40] => 38
[41] => 30
[42] => 46
[43] => 48
[44] => 49
[45] => 24
[46] => 50
[47] => 26
[48] => 50
[49] => 35
[50] => 46
[51] => 25
[52] => 49
[53] => 42
[54] => 45
[55] => 42
[56] => 39
[57] => 37
[58] => 42
[59] => 43
[60] => 46
[61] => 33
[62] => 51
[63] => 50
[64] => 24
)

Generate Range in used PHP and Skip already

I have a total number 47 which start from 0
I need to generate a range for eg: if I need to generate 4 number range I would like to get result 0-4 and for another 5-9
What I want is to generate similar but want exclude already using range eg: 0-4 or 5-9 and in range of 47.
Need to generate 6 count range from 0-47 range.
Available Numbers as below in array
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 [11] => 11 [12] => 12 [13] => 13 [14] => 14 [15] => 15 [16] => 16 [17] => 17 [18] => 18 [19] => 19 [20] => 20 [21] => 21 [22] => 22 [23] => 23 [24] => 24 [25] => 25 [26] => 26 [27] => 27 [28] => 28 [29] => 29 [30] => 30 [31] => 31 [32] => 32 [33] => 33 [34] => 34 [35] => 35 [36] => 36 [37] => 37 [38] => 38 [39] => 39 [40] => 40 [41] => 41 [42] => 42 [43] => 43 [44] => 44 [45] => 45 [46] => 46 [47] => 47
print_r($cores);
$used ='';
$dediq=mysqli_query($db,"SELECT * FROM `tblcomputs` WHERE `serverid` = '".$serverid."' AND `status` = 'Active'");
while ($dedi = mysqli_fetch_array($dediq)) {
if ($dedi['cp'] !='no'){
$used .= $dedi['cp'];
}
}
$required_rangecount ='6';
//here i'm consufed how to get this done.

Sort an array with the combiation of numbers, number_letters, letters_numbers and letters only

I am trying to sort and array, however, unable to get the array as intended.
I have an array like:
Array
(
[0] => 5
[1] => 7
[2] => 8
[3] => 9
[4] => 10
[5] => 11
[6] => 12
[7] => 13
[8] => 14
[9] => 15
[10] => 16
[11] => 17
[12] => 18
[13] => 19
[14] => 20
[15] => 21
[16] => 23
[17] => 24
[18] => 26
[19] => 28
[20] => 29
[21] => 30
[22] => 31
[23] => 32
[24] => 33
[25] => 34
[26] => 35
[27] => 36
[28] => 37
[29] => 38
[30] => 39
[31] => 40
[32] => 41
[33] => 42
[34] => 44
[35] => 46
[36] => 48
[37] => 50
[38] => 52
[39] => 54
[40] => A
[41] => B
[42] => 3
[43] => 4
[44] => 6
[45] => A1
[46] => B1
[47] => 1A
[48] => 22
[49] => 25
[50] => 27
[51] => 1B
)
When I run asort($arr) it returns:
Array
(
[47] => 1A
[51] => 1B
[42] => 3
[43] => 4
[0] => 5
[44] => 6
[1] => 7
[2] => 8
[3] => 9
[4] => 10
[5] => 11
[6] => 12
[7] => 13
[8] => 14
[9] => 15
[10] => 16
[11] => 17
[12] => 18
[13] => 19
[14] => 20
[15] => 21
[48] => 22
[16] => 23
[17] => 24
[49] => 25
[18] => 26
[50] => 27
[19] => 28
[20] => 29
[21] => 30
[22] => 31
[23] => 32
[24] => 33
[25] => 34
[26] => 35
[27] => 36
[28] => 37
[29] => 38
[30] => 39
[31] => 40
[32] => 41
[33] => 42
[34] => 44
[35] => 46
[36] => 48
[37] => 50
[38] => 52
[39] => 54
[40] => A
[45] => A1
[41] => B
[46] => B1
)
It is sorting normally, however, I am willing to have it sort according to combination such as Numbers, NumbersLetters, LettersNumbers, Letters.
For instance, this array should looks like:
Array
(
[42] => 3
[43] => 4
[0] => 5
[44] => 6
[1] => 7
[2] => 8
[3] => 9
[4] => 10
[5] => 11
[6] => 12
[7] => 13
[8] => 14
[9] => 15
[10] => 16
[11] => 17
[12] => 18
[13] => 19
[14] => 20
[15] => 21
[48] => 22
[16] => 23
[17] => 24
[49] => 25
[18] => 26
[50] => 27
[19] => 28
[20] => 29
[21] => 30
[22] => 31
[23] => 32
[24] => 33
[25] => 34
[26] => 35
[27] => 36
[28] => 37
[29] => 38
[30] => 39
[31] => 40
[32] => 41
[33] => 42
[34] => 44
[35] => 46
[36] => 48
[37] => 50
[38] => 52
[39] => 54
[47] => 1A
[51] => 1B
[45] => A1
[46] => B1
[40] => A
[41] => B
)
You can use user defined sort with uasort, check the Demo
uasort($array,function($a,$b){
if(is_numeric($a) && is_numeric($b)){
return $a - $b;
}elseif(is_numeric($a)){
return -1;
}elseif(is_numeric($b)){
return 1;
}else{
$length = max(strlen($a),strlen($b));
return strcmp(str_pad($a,$length,"z",STR_PAD_LEFT),str_pad($b,$length,"z",STR_PAD_LEFT));
}
});

how to Convert multidimensional array into single array

I have a dynamic, multi-dimensional array as shown below:
Array (
[1] => Array ( [0] => 63 [1] => 60 [2] => 67 [3] => 58 [4] => 35 [5] => 47 [6] => 30 [7] => 47 [8] => 61 [9] => 63 [10] => 56 [11] => 56 [12] => 44 [13] => 38 [14] => 36 [15] => 45 [16] => 39 [17] => 55 [18] => 60 [19] => 45 [20] => 37 [21] => 45 [22] => 63 [23] => 62 [24] => 50 [25] => 47 [26] => 46 [27] => 37 [28] => 69 [29] => 35 [30] => 33 [31] => 65 [32] => 63 [33] => 50 [34] => 69 [35] => 43 [36] => 65 [37] => 64 [38] => 45 [39] => 65 [40] => 43 [41] => 30 [42] => 51 [43] => 28 [44] => 33 [45] => 53 [46] => 67 [47] => 28 [48] => 47 [49] => 42 [50] => 49 )
[2] => Array ( [0] => 30 [1] => 30 [2] => 27 [3] => 29 [4] => 29 [5] => 29 [6] => 27 [7] => 28 [8] => 30 [9] => 29 [10] => 29 [11] => 29 [12] => 29 [13] => 28 [14] => 30 [15] => 29 [16] => 29 [17] => 28 [18] => 30 [19] => 27 [20] => 28 [21] => 27 [22] => 29 [23] => 30 [24] => 30 [25] => 28 [26] => 30 [27] => 29 [28] => 30 [29] => 27 [30] => 27 [31] => 27 [32] => 29 [33] => 29 [34] => 30 [35] => 28 [36] => 29 [37] => 29 [38] => 28 [39] => 30 [40] => 28 [41] => 28 [42] => 28 [43] => 28 [44] => 30 [45] => 27 [46] => 28 [47] => 27 [48] => 30 [49] => 27 [50] => 29 ) )
I want to convert it to this output array:
Array (
[0] => 63,30
.....
[50] => 49,29
)
This code will give you the answer you want. It finds the keys of the first element of the array using array_keys then uses array_column to fetch the values for that key for each entry in the array. The result from array_column is implode'd to give the desired value for the new array:
$newarray = array();
$keys = array_keys(array_values($array)[0]);
foreach ($keys as $key) {
$newarray[$key] = implode(',', array_column($array, $key));
}
print_r($newarray);
Output:
Array (
[0] => 63,30
[1] => 60,30
[2] => 67,27
[3] => 58,29
...
[50] => 49,29
)
Demo on 3v4l.org

PHP: range and foreach

I'm working with percents and rand(), I'm trying to create an array from 0 to 25 then 25 to 50 then 50 to 80.
But I got this array:
[0] => 55
[1] => 56
[2] => 57
[3] => 58
[4] => 59
[5] => 60
[6] => 61
[7] => 62
[8] => 63
[9] => 64
[10] => 65
[11] => 66
[12] => 67
[13] => 68
[14] => 69
[15] => 70
[16] => 71
[17] => 72
[18] => 73
[19] => 74
[20] => 75
[21] => 76
[22] => 77
[23] => 78
[24] => 79
[25] => 80
I want to create an array from 0 to 80.
My code is:
foreach($list_percents as $redir) {
$percent_array=range($inicial,($inicial+$redir->percent));
$percent_array=array_fill($inicial, $redir->percent, $redir->url);
$inicial=($inicial+$redir->percent);
}
print_r($percent_array);

Categories