I would like to ask for advice on adding elements to a two-dimensional array.

WBOY
Release: 2016-06-27 13:18:08
Original
1823 people have browsed it

<?php        while(mysql_fetch_array){                $arr[$key][] = array("value"=>$value);                if($somecondition){                        foreach($arr as $k => $v){                                $arr[$k][] = array("value"=>"");                        }                }        }?>
Copy after login


There is a situation where a loop creates a two-dimensional array and adds elements, but when a certain condition $somecondition occurs, a value is added to each $key in the array Empty element.

After adding it, take a look and find that the added empty elements have all moved to the front of the array. Why is this?

How can I add it correctly?


Reply to discussion (solution)

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"=>"");                                                 }                                 }                 }   ?>
Copy after login


My whole process is like this.
First determine the order of each key in while(mysql_fetch_array($res1)).
Then add elements to each key in while(mysql_fetch_array($res2)), and when a certain condition is encountered, empty elements are added.

What I get for the array is:
{
key1:[[],{"value":""},{"value":""},{"value":" "},{"value":36.63},{"value":35.97},{"value":32.8},{"value":32.65}
key2:[[],{"value":"" },{"value":""},{"value":""},{"value":36.63},{"value":35.97},{"value":32.8},{"value":32.65 }
}
And the array I originally planned to get is:
{
key1:[{"value":36.63},{"value":35.97},{"value":"" },{"value":""},{"value":""},{"value":32.8},{"value":32.65}
key2:[{"value":36.63},{ "value":35.97},{"value":""},{"value":""},{"value":""},{"value":32.8},{"value":32.65}
}

The extra [] in front of the array does not affect the drawing at present, but it does not match the standard format after all.

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"=>"");  }}
Copy after login

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.

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template