Home >Backend Development >PHP Tutorial >I would like to ask for advice on adding elements to a two-dimensional array.
<?php while(mysql_fetch_array){ $arr[$key][] = array("value"=>$value); if($somecondition){ foreach($arr as $k => $v){ $arr[$k][] = array("value"=>""); } } }?>
If no key name is specified for the given value, the current largest integer index value is taken, and the new The key name will be this value plus one. If the specified key name already has a value, the value will be overwritten.
At least there is a problem with your description $key and $k are not the same thing
So
$arr[$key][] = array("value"=>$value) ;
and
$arr[$k][] = array("value"=>"");
The assignment locations are different
You'd better post it Example of the format you need
At least there is a problem with your description $key and $k are not the same thing
So
$arr[$key][] = array("value"= >$value);
and
$arr[$k][] = array("value"=>"");
The assignment locations are different
You'd better post an example of the format you need
<?php while(mysql_fetch_array($res1)){ $arr[$key][] = array(); //为了确定每个key在数组的前后顺序 } while(mysql_fetch_array($res1)){ $arr[$key][] = array("value"=>$value); if($somecondition){ foreach($arr as $k => $v){ $arr[$k][] = array("value"=>""); } } } ?>
At least there is a problem with your description $key and $k are not the same thing
So
$arr[$key][] = array("value"=>$value) ;
and
$arr[$k][] = array("value"=>"");
The location of the assignment is different
You'd better post it Example of the format you need
Or if I want to implement the logic of my LS, how should I do it?
In that case, why don’t you do related queries?
Back to 2L, I printed the name of $k in foreach, which is indeed the same as the $key in the outer while.
Back to 5L, the data inventory contains a number of time points, and each time point has dozens of values corresponding to $key.
What I do now is to query it first, for example Throughout the day, calculate the top 10 total rankings to determine the order of $keys, and then check the assignment again.
If you want to query directly in the database, I am not familiar with the MySQL select command at present, and I am worried that a certain key was in the 10th position at the previous time point, and the 11th position at the next time point, and then it will be The statistics are no longer available.
When querying twice, if the data changes between the two queries, how will you handle it?
For the first time, choose a larger range to calculate the top 10 overall rankings, which can reflect an overall trend to a certain extent. The rankings at those time points in the middle are not the same as the overall rankings, but the general trend is the same, and I Check the historical records.
Then for some reasons, there is no record at certain points in time. I want to insert a null value into each key at this point in time, but I don’t know why the inserted null value ended up in the array. the front. . . .
By the way, if it is a one-dimensional array, I can directly use the arsort function for ranking, but since the json format is fixed, I can only use the two-dimensional one specified by the format.
I kind of understand what you mean
while(mysql_fetch_array){ $arr[$key][] = array("value"=>$value); if($somecondition){ $arr[$key][] = array("value"=>""); }}
I kind of understand what you mean
Python code?123456while(mysql_fetch_array){ $arr[$key][] = array("value"=>$value); if($somecondition){ $arr[ $key][] = array("value"=>""); }}
.
$somecondition is to judge that the time point in mysql_fetch_array is too different from the previous time point. Then I will fill in the time points according to the interval. At this time point, I should fill in null values for all keys, so I use foreach to traverse it again. The result of the supplement is that the filled null values are at the front of the array. .
You should still need foreach. .
The idea should be like this
while(mysql_fetch_array){
if($somecondition){ //If the gap is too big
$arr[$key][] = array("value "=>""); //Insert null values. If there is more than one, use for loop
}
$arr[$key][] = array("value"=>$value); //Add data
}
The idea should be like this
while(mysql_fetch_array){
if($somecondition){ //If the gap is too big
$arr[$key ][] = array("value"=>""); //Insert a null value. If there is more than one, use a for loop
}
$arr[$key][] = array("value "=>$value); //Add data
}
......
I know what is wrong. . The statements queried by my mysql are not in the order of time points, but in the order of keys. . . What a scam. .
Didn’t you check twice?
The first time is arranged in the order of keys
The second time is arranged in the order of time points
The idea should be like this
while(mysql_fetch_array){
if($somecondition) { //If the gap is too big
$arr[$key][] = array("value"=>""); //Insert a null value. If there is more than one, use a for loop
}
$arr[$key][] = array("value"=>$value); //Add data
}
……
Thank you. . In fact, the logic and implementation are correct. It's because I'm not good at mysql, so I wrote the two conditions after group by in reverse order.