I want to cut array in php. My array is listed below :
Array
(
[0] => 6/1/2014
[1] => 6/2/2014
[2] => 6/3/2014
[3] => 6/4/2014
[4] => 6/5/2014
[5] => 6/6/2014
[6] => 6/7/2014
[7] => 6/8/2014
[8] => 6/9/2014
[9] => 6/10/2014
[10] => 6/11/2014
[11] => 6/12/2014
[12] => 6/13/2014
[13] => 6/14/2014
[14] => 6/15/2014
[15] => 6/16/2014
[16] => 6/17/2014
[17] => 6/18/2014
[18] => 6/19/2014
[19] => 6/20/2014
[20] => 6/21/2014
[21] => 6/22/2014
[22] => 6/23/2014
[23] => 6/24/2014
[24] => 6/25/2014
[25] => 6/26/2014
[26] => 6/27/2014
[27] => 6/28/2014
[28] => 6/29/2014
[29] => 6/30/2014
[30] => 7/1/2014
[31] => 7/2/2014
[32] => 7/3/2014
[33] => 7/4/2014
[34] => 7/5/2014
[35] => 7/6/2014
[36] => 7/7/2014
[37] => 7/8/2014
[38] => 7/9/2014
[39] => 7/10/2014
[40] => 7/11/2014
[41] => 7/12/2014
[42] => 7/13/2014
[43] => 7/14/2014
[44] => 7/15/2014
[45] => 7/16/2014
[46] => 7/17/2014
[47] => 7/18/2014
[48] => 7/19/2014
[49] => 7/20/2014
[50] => 7/21/2014
[51] => 7/22/2014
[52] => 7/23/2014
[53] => 7/24/2014
[54] => 7/25/2014
[55] => 7/26/2014
[56] => 7/27/2014
[57] => 7/28/2014
[58] => 7/29/2014
[59] => 7/30/2014
[60] => 7/31/2014
[61] => 8/1/2014
)
In this array 0 to 29 elements if for 6th Month, 30th to 60th elements are for 7th Month etc..
Now i want this array in the below fashion
Array
(
[0] => 6/1/2014
[1] => 6/2/2014
[2] => 6/3/2014
[3] => 6/4/2014
[4] => 6/5/2014
[5] => 6/6/2014
[6] => 6/7/2014
[7] => 6/8/2014
[8] => 6/9/2014
[9] => 6/10/2014
[10] => 6/11/2014
[11] => 6/12/2014
[12] => 6/13/2014
[13] => 6/14/2014
[14] => 6/15/2014
[15] => 6/16/2014
[16] => 6/17/2014
[17] => 6/18/2014
[18] => 6/19/2014
[19] => 6/20/2014
[20] => 6/21/2014
[21] => 6/22/2014
[22] => 6/23/2014
[23] => 6/24/2014
[24] => 6/25/2014
[25] => 6/26/2014
[26] => 6/27/2014
[27] => 6/28/2014
[28] => 6/29/2014
[29] => 6/30/2014
)
Array
(
[0] => 7/1/2014
[1] => 7/2/2014
[2] => 7/3/2014
[3] => 7/4/2014
[4] => 7/5/2014
[5] => 7/6/2014
[6] => 7/7/2014
[7] => 7/8/2014
[8] => 7/9/2014
[9] => 7/10/2014
[10] => 7/11/2014
[11] => 7/12/2014
[12] => 7/13/2014
[13] => 7/14/2014
[14] => 7/15/2014
[15] => 7/16/2014
[16] => 7/17/2014
[17] => 7/18/2014
[18] => 7/19/2014
[19] => 7/20/2014
[20] => 7/21/2014
[21] => 7/22/2014
[22] => 7/23/2014
[23] => 7/24/2014
[24] => 7/25/2014
[25] => 7/26/2014
[26] => 7/27/2014
[27] => 7/28/2014
[28] => 7/29/2014
[29] => 7/30/2014
[30] => 7/31/2014
)
Array
(
[0] => 8/1/2014
)
This calculation should be in a way that if i chose other months then it also do the same process of cutting array for different months.
you can also separate array by month & and put them in main array
$arrres =array();
foreach($arr as $value)
{
$arrres[str_replace('/','',substr($value,0,2))][] = $value ;
}
print_r($arrres);
you can use this:, it will also generate arrays with same num of days in months (28,30,31)
//generate dates for test
$dates = [];
for($i = 0 ; $i < 90 ; $i++){
$dates[] = Date("d/m/Y",time()-($i*24*3600));
}
//make results, also validates that it's same month and year
$result = [];
foreach($dates as $date){
$dStr = Date("m-y",strtotime(str_replace('/', '-', $date)));
if(!isset($result[$dStr])) $result[$dStr] = [];
$result[$dStr][] = $date;
}
var_dump($result);
I'd explode the value of every index in your array and set it as an index to the new array.
$days = [];
foreach($your_array as $day) {
$days[ explode("/", $day)[0] ][] = $day;
}
var_dump( $days );
Related
First of all, I am using this piece of code in PHP to retrieve data from a database.
DATABASE DATA CODE:
// Database Details
$servername = "localhost";
$username = "admin_testdb";
$password = "123412345";
$dbname = "test_db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM `HOURLY_DATA` WHERE 1 ORDER BY `HOURLY_DATA`.`TIME` ASC";
// Run $sql content as sql script in db.
$result=$conn->query($sql);
This code is just fine and has absolutely no errors or problems related to my goal here.
Also the specific data table I am looking after in this Query is the table named TIME which is of type "Datetime" format in SQL which looks like this:
DATETIME FORMAT:
YYYY-MM-DDTHH:MM:SS or to make it more clear an example would be 1970-09-24T05:00:00
Now moving onto what I am trying to achieve, my code and then the problem.
The Goal:
I have a list of data in the datetime format explained above, where theres HOURS missing, the increment of the HOURS is always +1 meaning that an example of missing data inside this data table would be:
2021-11-01T00:00:00
2021-11-01T01:00:00
2021-11-01T02:00:00
2021-11-01T05:00:00
2021-11-01T06:00:00
2021-11-01T07:00:00
2021-11-01T08:00:00
2021-11-01T13:00:00
2021-11-01T14:00:00
2021-11-01T15:00:00
2021-11-01T16:00:00
2021-11-01T17:00:00
2021-11-01T18:00:00
2021-11-01T19:00:00
2021-11-01T20:00:00
2021-11-01T21:00:00
So by taking a look at this DATETIME list above, we can understand that there is data missing and more specifically hours missing like 22:00:00 or 23:00:00 etc...
Now I want to write a code that will find this missing HOUR steps.
So far I have tried this code:
// Run $sql content as sql script in db.
$result=$conn->query($sql);
$flag = 0;
$i = 0;
$x = 0;
$cont = array();
$temp = array();
foreach ($result as $value) {
$singular_value = $value["TIME"];
$singular_value = str_replace(" ", "", $singular_value);
$day_value = $singular_value[8].$singular_value[9];
$day_value = (int) $day_value;
$singular_value = $singular_value[11].$singular_value[12];
$singular_value = (int) $singular_value;
// First time running.
if ( $flag == 0 ){
$day_chair = $day_value;
$flag = 1;
}
if ( $day_chair == $day_value ){
$temp[]= $value["TIME"];
$cont[$i]= $temp;
$day_chair = $day_value;
} else {
if ( $day_value == 30 || $day_value == 31 ){
$day_chair = 1;
continue;
} else {
$day_chair += 1;
$temp = array();
}
$i++;
}
}
print("<pre>".print_r($cont,true)."</pre>");
*PROBLEM:
To begin with this code returns the hour 00 which is considered to be the 12 o'clock midnight only for the first iteration or day.
Also the code above is supposed to return and array that will look like this:
Array
(
[0] => Array
(
[0] => 2021-11-01T00:00:00
[1] => 2021-11-01T01:00:00
[2] => 2021-11-01T02:00:00
[3] => 2021-11-01T03:00:00
[4] => 2021-11-01T04:00:00
[5] => 2021-11-01T05:00:00
[6] => 2021-11-01T06:00:00
[7] => 2021-11-01T07:00:00
[8] => 2021-11-01T08:00:00
[9] => 2021-11-01T09:00:00
[10] => 2021-11-01T10:00:00
[11] => 2021-11-01T11:00:00
[12] => 2021-11-01T12:00:00
[13] => 2021-11-01T13:00:00
[14] => 2021-11-01T14:00:00
[15] => 2021-11-01T15:00:00
[16] => 2021-11-01T16:00:00
[17] => 2021-11-01T17:00:00
[18] => 2021-11-01T18:00:00
[19] => 2021-11-01T19:00:00
[20] => 2021-11-01T20:00:00
[21] => 2021-11-01T21:00:00
[22] => 2021-11-01T22:00:00
[23] => 2021-11-01T23:00:00
)
[1] => Array
(
[0] => 2021-11-02T00:00:00
[1] => 2021-11-02T01:00:00
[2] => 2021-11-02T02:00:00
[3] => 2021-11-02T03:00:00
[4] => 2021-11-02T04:00:00
[5] => 2021-11-02T05:00:00
[6] => 2021-11-02T06:00:00
[7] => 2021-11-02T07:00:00
[8] => 2021-11-02T08:00:00
[9] => 2021-11-02T09:00:00
[10] => 2021-11-02T10:00:00
[11] => 2021-11-02T11:00:00
[12] => 2021-11-02T12:00:00
[13] => 2021-11-02T13:00:00
[14] => 2021-11-02T14:00:00
[15] => 2021-11-02T15:00:00
[16] => 2021-11-02T16:00:00
[17] => 2021-11-02T17:00:00
[18] => 2021-11-02T18:00:00
[19] => 2021-11-02T19:00:00
[20] => 2021-11-02T20:00:00
[21] => 2021-11-02T21:00:00
[22] => 2021-11-02T22:00:00
[23] => 2021-11-02T23:00:00
)
[2] => Array
(
[0] => 2021-11-03T00:00:00
[1] => 2021-11-03T01:00:00
[2] => 2021-11-03T02:00:00
[3] => 2021-11-03T03:00:00
[4] => 2021-11-03T04:00:00
[5] => 2021-11-03T05:00:00
[6] => 2021-11-03T06:00:00
[7] => 2021-11-03T07:00:00
[8] => 2021-11-03T08:00:00
[9] => 2021-11-03T09:00:00
[10] => 2021-11-03T10:00:00
[11] => 2021-11-03T11:00:00
[12] => 2021-11-03T12:00:00
[13] => 2021-11-03T13:00:00
[14] => 2021-11-03T14:00:00
[15] => 2021-11-03T15:00:00
[16] => 2021-11-03T16:00:00
[17] => 2021-11-03T17:00:00
[18] => 2021-11-03T18:00:00
[19] => 2021-11-03T19:00:00
[20] => 2021-11-03T20:00:00
[21] => 2021-11-03T21:00:00
[22] => 2021-11-03T22:00:00
[23] => 2021-11-03T23:00:00
)
)
And will leave a GAP or simply do write nothing in the array if the date is missing from the database. But this code return a lot of problematic arrays and just to give an example there are some here:
First day was parsed fine but the second one and all the days after the first day are missing the 12 o'clock aka 00:00:00
E.X:
[0] => Array
(
[0] => 2021-11-01T00:00:00
[1] => 2021-11-01T01:00:00
[2] => 2021-11-01T02:00:00
[3] => 2021-11-01T03:00:00
[4] => 2021-11-01T04:00:00
[5] => 2021-11-01T05:00:00
[6] => 2021-11-01T06:00:00
[7] => 2021-11-01T07:00:00
[8] => 2021-11-01T08:00:00
[9] => 2021-11-01T09:00:00
[10] => 2021-11-01T10:00:00
[11] => 2021-11-01T11:00:00
[12] => 2021-11-01T12:00:00
[13] => 2021-11-01T13:00:00
[14] => 2021-11-01T14:00:00
[15] => 2021-11-01T15:00:00
[16] => 2021-11-01T16:00:00
[17] => 2021-11-01T17:00:00
[18] => 2021-11-01T18:00:00
[19] => 2021-11-01T19:00:00
[20] => 2021-11-01T20:00:00
[21] => 2021-11-01T21:00:00
[22] => 2021-11-01T22:00:00
[23] => 2021-11-01T23:00:00
)
[1] => Array
(
[0] => 2021-11-02T01:00:00
[1] => 2021-11-02T02:00:00
[2] => 2021-11-02T03:00:00
[3] => 2021-11-02T04:00:00
[4] => 2021-11-02T05:00:00
[5] => 2021-11-02T06:00:00
[6] => 2021-11-02T07:00:00
[7] => 2021-11-02T08:00:00
[8] => 2021-11-02T09:00:00
[9] => 2021-11-02T10:00:00
[10] => 2021-11-02T11:00:00
[11] => 2021-11-02T12:00:00
[12] => 2021-11-02T13:00:00
[13] => 2021-11-02T14:00:00
[14] => 2021-11-02T15:00:00
[15] => 2021-11-02T16:00:00
[16] => 2021-11-02T17:00:00
[17] => 2021-11-02T18:00:00
[18] => 2021-11-02T19:00:00
[19] => 2021-11-02T20:00:00
[20] => 2021-11-02T21:00:00
[21] => 2021-11-02T22:00:00
[22] => 2021-11-02T23:00:00
)
Also, there are broken days for example when the day reaches day 30 or 31 of the month this happens:
[28] => Array
(
[0] => 2021-11-29T01:00:00
[1] => 2021-11-29T02:00:00
[2] => 2021-11-29T03:00:00
[3] => 2021-11-29T04:00:00
[4] => 2021-11-29T05:00:00
[5] => 2021-11-29T06:00:00
[6] => 2021-11-29T07:00:00
[7] => 2021-11-29T08:00:00
[8] => 2021-11-29T09:00:00
[9] => 2021-11-29T10:00:00
[10] => 2021-11-29T11:00:00
[11] => 2021-11-29T12:00:00
[12] => 2021-11-29T13:00:00
[13] => 2021-11-29T14:00:00
[14] => 2021-11-29T15:00:00
[15] => 2021-11-29T16:00:00
[16] => 2021-11-29T17:00:00
[17] => 2021-11-29T18:00:00
[18] => 2021-11-29T19:00:00
[19] => 2021-11-29T20:00:00
[20] => 2021-11-29T21:00:00
[21] => 2021-11-29T22:00:00
[22] => 2021-11-29T23:00:00
[23] => 2021-12-01T00:00:00
[24] => 2021-12-01T01:00:00
[25] => 2021-12-01T02:00:00
[26] => 2021-12-01T03:00:00
[27] => 2021-12-01T04:00:00
[28] => 2021-12-01T05:00:00
[29] => 2021-12-01T06:00:00
[30] => 2021-12-01T07:00:00
[31] => 2021-12-01T08:00:00
[32] => 2021-12-01T09:00:00
[33] => 2021-12-01T10:00:00
[34] => 2021-12-01T11:00:00
[35] => 2021-12-01T12:00:00
[36] => 2021-12-01T13:00:00
[37] => 2021-12-01T14:00:00
[38] => 2021-12-01T15:00:00
[39] => 2021-12-01T16:00:00
[40] => 2021-12-01T17:00:00
[41] => 2021-12-01T18:00:00
[42] => 2021-12-01T19:00:00
[43] => 2021-12-01T20:00:00
[44] => 2021-12-01T21:00:00
[45] => 2021-12-01T22:00:00
[46] => 2021-12-01T23:00:00
)
[29] => Array
(
[0] => 2021-12-02T01:00:00
[1] => 2021-12-02T02:00:00
[2] => 2021-12-02T03:00:00
[3] => 2021-12-02T04:00:00
[4] => 2021-12-02T05:00:00
[5] => 2021-12-02T06:00:00
[6] => 2021-12-02T07:00:00
[7] => 2021-12-02T08:00:00
[8] => 2021-12-02T09:00:00
[9] => 2021-12-02T10:00:00
[10] => 2021-12-02T11:00:00
[11] => 2021-12-02T12:00:00
[12] => 2021-12-02T13:00:00
[13] => 2021-12-02T14:00:00
[14] => 2021-12-02T15:00:00
[15] => 2021-12-02T16:00:00
[16] => 2021-12-02T17:00:00
[17] => 2021-12-02T18:00:00
[18] => 2021-12-02T19:00:00
[19] => 2021-12-02T20:00:00
[20] => 2021-12-02T21:00:00
[21] => 2021-12-02T22:00:00
[22] => 2021-12-02T23:00:00
)
QUESTION:
What can I do to solve this programmatic/algorithmic problem or what am I doing wrong in my code?
Here is an array that I want to sort. This is taken by an HTML table that is already stored in the database. But here it has 50 indexes. That's the thing I want to reduce to seven.
(
[0] => Array
(
[0] =>
[1] => data
[2] => data
[3] => data
[4] => data
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[2] => Array
(
[0] => 1
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[3] => Array
(
[0] => 2
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[4] => Array
(
[0] => 3
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[5] => Array
(
[0] => 4
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[6] => Array
(
[0] => 5
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[7] => Array
(
[0] => 6
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[8] => Array
(
[0] => 7
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[9] => Array
(
[0] => 8
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
[10] => Array
(
[0] => 9
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] =>
[21] =>
[22] =>
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
)
)
I tried with for loops, foreach loops to sort this array shows up to 7 indexes. It should be like this.
(
[0] => Array
(
[0] =>
[1] => data
[2] => data
[3] => data
[4] => data
[5] =>
[6] =>
[7] =>
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
)
[2] => Array
(
[0] => 1
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[3] => Array
(
[0] => 2
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[4] => Array
(
[0] => 3
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[5] => Array
(
[0] => 4
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[6] => Array
(
[0] => 5
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[7] => Array
(
[0] => 6
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[8] => Array
(
[0] => 7
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[9] => Array
(
[0] => 8
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
[10] => Array
(
[0] => 9
[1] => data
[2] => data
[3] => data
[4] => data
[5] => data
[6] =>
[7] =>
)
)
What did I try is,
for ($row = 0; $row <= sizeof($arr); $row++) {
for ($col = 0; $col < 7; $col++) {
$aar[] = $arr[$row][$col];
}
}
This method wasn't worked. What is the way or any suggestions on this?
If you just want to keep x amount of elements from each sub-array, you can use array_slice():
$newArray = [];
foreach($arr as $sub) {
// The example array you say you want have 8 elements, indexes 0-7
// so start with index 0 and take 8
$newArray[] = array_slice($sub, 0, 8);
}
Here's a demo: https://3v4l.org/WhFm4
Here is the one possible solution to your problem. Just define the key limit in if condition. Hope it will solve your problem.
$row = [
[
'',
'data',
'data',
'data',
'',
'',
'',
''
],
[
'',
'data',
'data',
'data',
'',
'',
'',
''
]
];
$reducedArray = [];
foreach ($row as $col) {
$tempArray = [];
foreach ($col as $innnerKey => $innerValue) {
// Define your index limit here.
// As you can see I have set the limit to 7
if ($innnerKey <= 7) {
$tempArray[] = $innerValue;
}
}
$reducedArray[] = $tempArray;
}
echo '<pre>';
print_r($row);
echo '</pre>';
echo '<br/>';
echo '<pre>';
print_r($reducedArray);
echo '</pre>';
I am developing a financial web application I am really stuck with this issue.
I need to search with conditions and return the array if the condition is true..
I know the multi-dimensional array search, but I did't get any idea for this. For example :
if array[0][7] > array[0][8] && array[0][12] < array[0][15]
Please suggest me the solution
Array (
[0] => Array (
[0] => 54452
[1] => 'KSB'
[2] => 'INE999A01015'
[3] => 'EQ'
[4] => 'Ksb Limited'
[5] => -0.70
[6] => -0.10
[7] => 662.90
[8] => 663.60
[9] => 669.35
[10] => 678.25
[11] => 651.55
[12] => 7874
[13] => 676.91
[14] => 690.93
[15] => 703.61
[16] => 664.23
[17] => 650.21
[18] => 637.53
[19] => 623.51
[20] => 2530
[21] => 32.13
[22] => 825.00
[23] => 539.00
[24] => 665.89
[25] => 631.37
[26] => 616.65
[27] => 610.14
[28] => 615.89
[29] => 656.25
[30] => 680.74
[31] => 60.71
[32] => 60.71
[33] => 13.62
[34] => 29.39
[35] => -38.97
[36] => 129.47
[37] => 2019-09-26
[38] => 27632
),
[1] => Array (
[0] => 53772
[1] => 'ASPINWALL'
[2] => 'INE991I01015'
[3] => 'EQ'
[4] => 'Aspinwall And Company Limited'
[5] => -10.50
[6] => -7.74
[7] => 127.45
[8] => 137.95
[9] => 135.60
[10] => 144.50
[11] => 112.60
[12] => 9583
[13] => 143.76
[14] => 160.08
[15] => 175.66
[16] => 128.18
[17] => 111.86
[18] => 96.28
[19] => 79.96
[20] => 5108
[21] => 53.30
[22] => 214.80
[23] => 112.60
[24] => 135.17
[25] => 137.13
[26] => 137.46
[27] => 136.86
[28] => 137.59
[29] => 143.00
[30] => 153.89
[31] => 39.41
[32] => 39.41
[33] => -0.90
[34] => 37.96
[35] => -58.05
[36] => -361.91
[37] => 2019-09-26
[38] => 26324
)
)
Thanks in advance
Give a try to following code and make necessary changes according to your need
function search_sg_dma($array, $pre_close, $dma_value, $close_price){
...
$result = array();
for( $i = 0; $i < count( $array ); $i++ ) {
if ( $array[$i][$pre_close] < $array[$i][$dma_value] && $array[$i][$close_price] > $array[$i][$dma_value] ) {
$result[] = array[$i];
}
}
return $result;
}
I have a query the returns columns from the INFORMATION_SCHEMA.
I then create an array, use the array in a foreach loop to create another array.
The issue I have is the final array starts at a position 0, producing column SeqID0 but the first column is SeqID1:
Array ( [0] => SeqID0 [1] => SeqID1 [2] => SeqID2 [3] => SeqID3 [4] => SeqID4 [5] => SeqID5 [6] => SeqID6 [7] => SeqID7 [8] => SeqID8 [9] => SeqID9 [10] => SeqID10 [11] => SeqID11 [12] => SeqID12 [13] => SeqID13 [14] => SeqID14 [15] => SeqID15 [16] => SeqID16 [17] => SeqID17 [18] => SeqID18 [19] => SeqID19 [20] => SeqID20 [21] => SeqID21 [22] => SeqID22 [23] => SeqID23 [24] => SeqID24 [25] => SeqID25 [26] => SeqID26 [27] => SeqID27 [28] => SeqID28 [29] => SeqID29 [30] => SeqID30 [31] => SeqID31 [32] => SeqID32 [33] => SeqID33 [34] => SeqID34 [35] => SeqID35 [36] => SeqID36 [37] => SeqID37 [38] => SeqID38 [39] => SeqID39 [40] => SeqID40 [41] => SeqID41 [42] => SeqID42 [43] => SeqID43 [44] => SeqID44 [45] => SeqID45 [46] => SeqID46 )
How can I make the array start at SeqID1.
This is my code;
$strSQLCol = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME= 'NXLHR_Active' AND COLUMN_NAME LIKE 'SeqID%'";
$rsCol = mysqli_query($link,$strSQLCol);
$SeqList = array();
do {
$SeqList[] = $row;
} while($row = $rsCol->fetch_assoc());
$SeqIDArray = array();
foreach($SeqList as $key => $value) {
$SeqIDArray[] = 'SeqID' . $key;
}
Many thanks in advance for your time.
Here your improved code. Notice I have added a conditional in foreach:
foreach($SeqList as $key => $value) {
if (1 > $key) { continue; }
$SeqIDArray[] = 'SeqID' . $key;
}
I am trying to get my image slides to display in order by number with the following:
$image=array();
$img_folder = $params->get('path');
mt_srand((double)microtime()*1000);
if(is_dir($img_folder)){
krsort($file);
$imgs = dir($img_folder);
while ($file = $imgs->read()) {
if ((eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file)))
$image[] = "$file";
} closedir($imgs->handle);
print_r($image);
return $image;
}
However, the array works but the order is off:
Array ( [0] => Slide1.png [1] => Slide10.png [2] => Slide11.png [3] => Slide12.png [4] => Slide13.png [5] => Slide14.png [6] => Slide15.png [7] => Slide16.png [8] => Slide17.png [9] => Slide18.png [10] => Slide19.png [11] => Slide2.png [12] => Slide20.png [13] => Slide21.png [14] => Slide22.png [15] => Slide23.png [16] => Slide24.png [17] => Slide25.png [18] => Slide26.png [19] => Slide27.png [20] => Slide28.png [21] => Slide29.png [22] => Slide3.png [23] => Slide30.png [24] => Slide31.png [25] => Slide4.png [26] => Slide5.png [27] => Slide6.png [28] => Slide7.png [29] => Slide8.png [30] => Slide9.png )
If I put natsort($image); after $image[] = "$file"; the order is correct but the array is off:
Array ( [0] => Slide1.png [11] => Slide2.png [22] => Slide3.png [25] => Slide4.png [26] => Slide5.png [27] => Slide6.png [28] => Slide7.png [29] => Slide8.png [30] => Slide9.png [1] => Slide10.png [2] => Slide11.png [3] => Slide12.png [4] => Slide13.png [5] => Slide14.png [6] => Slide15.png [7] => Slide16.png [8] => Slide17.png [9] => Slide18.png [10] => Slide19.png [12] => Slide20.png [13] => Slide21.png [14] => Slide22.png [15] => Slide23.png [16] => Slide24.png [17] => Slide25.png [18] => Slide26.png [19] => Slide27.png [20] => Slide28.png [21] => Slide29.png [23] => Slide30.png [24] => Slide31.png )
I need them to order Slide1 - Slide30, not like listed above. I could change the names from numeric (Slide1) to alphabetic (SlideA) but would like to keep this naming convention. Is there a way to do this without changing the image names?
This image slide is a "how to" slide show.
NatSort is what you are looking for.
just use natsort($image);
You can reference it at:
http://php.net/manual/es/function.natsort.php
I didn't know about natsort(), this should do it too though..
$imgs = scandir(dir($img_folder));
$sorted = array();
foreach($imgs as $img){
$index = intval(trim($img, "Slide.png"));
$sorted[$index] = $img;
}
ksort($sorted);
$sorted = array_values($sorted);
You can use natsort() function
natsort
e.g.
$array1 = array("img12.png", "img10.png", "img2.png", "img1.png");
natsort($array);
print_r($array);
This way you will get out put is :
Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )
You can also use natcasesort($image). It sort an array using a case insensitive "natural order" algorithm.
This did the trick!!!
Just after
$image[] = "$file";
I added
sort($image, SORT_NATURAL | SORT_FLAG_CASE);
This correctly orders the images in the array and the order:
Array ( [0] => Slide1.png [1] => Slide2.png [2] => Slide3.png [3] => Slide4.png [4] => Slide5.png [5] => Slide6.png [6] => Slide7.png [7] => Slide8.png [8] => Slide9.png [9] => Slide10.png [10] => Slide11.png [11] => Slide12.png [12] => Slide13.png [13] => Slide14.png [14] => Slide15.png [15] => Slide16.png [16] => Slide17.png [17] => Slide18.png [18] => Slide19.png [19] => Slide20.png [20] => Slide21.png [21] => Slide22.png [22] => Slide23.png [23] => Slide24.png [24] => Slide25.png [25] => Slide26.png [26] => Slide27.png [27] => Slide28.png [28] => Slide29.png [29] => Slide30.png [30] => Slide31.png )