关联数组(2个分区)

It's been awhile since I did any PHP programming so I'm trying to kick of the rust.

I'm trying to create an associative array structure as this.

[results]
     [total]
     [people]
         [name]
         [street]
         [city]
         [state]
         [zip]

Currently, I have this.

$people = array( 'name' => '',
                 'street' => '',
                 'city' => '',
                 'state' => '',
                 'zip' => );

$results = array('total' => 10, --set dynamically
                 'people' => $people );

So in my head I hope a making an empty multidimensional array that I will be able to populate in a while loop.

First, question is this the proper form? I feel like I'm close but not right. It might be helpful to understand what I'm doing (shown below).

So I as a said I want to fill this in a while loop and this is basically what I have so far. And by so far, I've been unable to get to work.

$i = 0;
while loop
{
   $results['people'][i][name] = 'XxXxX'
   $results['people'][i][street] = 'XxXxX'
   $results['people'][i][city] = 'XxXxX'
   $results['people'][i][state] = 'XxXxX'
   $results['people'][i][zip] = 'XxXxX'


 %i++;
}

I've tried many different combinations of this and have still been unable to get it right. If it matters, I want to take this array and send it back to the browser as a JSON object.

I'm not sure if my initialization is wrong, setting the array in the loop is wrong, or both.

PHP arrays need to be instantiated separately, and in-place. I don't know how to describe it properly, but your code should look something like:

$results = array();
$results['total'] = $somevalue;
$results['people'] = array();

/*or:
$results = array(
  'total' => $somevalue,
  'people' => array()
);*/

$i = 0;
while($some_condition) {   //or: for( $i=0; $i<$something; $i++ ) {
   $results['people'][$i] = array();
   $results['people'][$i]['name']   = 'XxXxX';
   $results['people'][$i]['street'] = 'XxXxX';
   $results['people'][$i]['city']   = 'XxXxX';
   $results['people'][$i]['state']  = 'XxXxX';
   $results['people'][$i]['zip']    = 'XxXxX';

   /*or:
   $results['people'][$i] = array(
       'name'   => 'XxXxX',
       'street' => 'XxXxX',
       'city'   => 'XxXxX',
       'state'  => 'XxXxX',
       'zip'    => 'XxXxX',
   );*/

   $i++;
}

Bear in mind that if you're using associative arrays you need to wrap the key string in quotes. Also, you can still access associative arrays using integer indexes the you should feel so inclined.

There are a few issues that I see. The first is you have %i++ instead of $i++. Later, you reference i instead of $i. The next is inside of your while loop, you are attempting to access name, street, ect without using quotes (this may/may not display a warning depending on your configuration).

Try using this:

$i = 0;
while(NEED SOME CONDITION HERE)
{
   $results['people'][$i] = array(); //Need to let PHP know this will be an array
   $results['people'][$i]['name'] = 'XxXxX'
   $results['people'][$i]['street'] = 'XxXxX'
   $results['people'][$i]['city'] = 'XxXxX'
   $results['people'][$i]['state'] = 'XxXxX'
   $results['people'][$i]['zip'] = 'XxXxX'


 $i++;
}
$i = 0;
while (true)
{
   $results['people'][$i]['name'] = 'XxXxX'
   $results['people'][$i]['street'] = 'XxXxX'
   $results['people'][$i]['city'] = 'XxXxX'
   $results['people'][$i]['state'] = 'XxXxX'
   $results['people'][$i]['zip'] = 'XxXxX'


 $i++;
}

First rather than naming all your keys and declaring empty strings you can just make an array of names and use array_fill_keys to convert them to keys and give them all a default value (should probably use NULL instead of '' unless you need to use append (.=) in a loop. Rather than a while loop, I would just use a for loop, but you could do a while $i < 10 with $i++ if you prefer while over for

$people = array_fill_keys(array('name', 'street', 'city', 'state', 'zip'), '');

$results = array('total' => 10, 'people' => array());

for($i = 0; $i < $results['total']; $i++){
    $results['people'][$i]['name'] = 'XxXxX';
    $results['people'][$i]['street'] = 'XxXxX';
    $results['people'][$i]['city'] = 'XxXxX';
    $results['people'][$i]['state'] = 'XxXxX';
    $results['people'][$i]['zip'] = 'XxXxX';
}