Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array parts access

Tags:

php

I'm trying to understand arrays better. Pardon my elementary questions as I just opened my first php book three weeks ago.

I get that you can retrieve key/value pairs using a foreach (or for loop) as below.

 $stockprices= array("Google"=>"800", "Apple"=>"400", "Microsoft"=>"4",  "RIM"=>"15",  "Facebook"=>"30");

foreach ($stockprices as $key =>$price)

What I get confused about are multi dimensional arrays like this one:

$states=(array([0]=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1),
              [1]=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2),
              [2]=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14)
              ));

My first question is really basic: I know that "capital', "joined_union", "population_rank" are keys and "Sacramento", "1850", "1" are values (correct?). But what do you call [0][1][2]? Are they "main keys" and "capital" etc. sub-keys? I can't find any definition for those; neither in books nor online.

The main question is how do I retrieve Arrays [0][1][2]? Say I want to get the array that joined_union in 1845 (or even trickier during the 1800s), then remove that array.

Finally, can I name Arrays [0][1][2] as California, Texas and Massachusetts correspondingly?

$states=(array("California"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1),
              "Texas"=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2),
              "Massachusetts"=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14)
              ));
like image 335
Patty Avatar asked Oct 22 '22 10:10

Patty


2 Answers

Unlike other languages, arrays in PHP can use numeric or string keys. You choose. (This is not a well loved feature of PHP and other languages sneer!)

$states = array(
    "California"    => array(
        "capital"         => "Sacramento",
        "joined_union"    => 1850,
        "population_rank" => 1
    ),
    "Texas"         => array(
        "capital"         => "Austin",
        "joined_union"    => 1845,
        "population_rank" => 2
    ),
    "Massachusetts" => array(
        "capital"         => "Boston",
        "joined_union"    => 1788,
        "population_rank" => 14
    )
);

As for querying the structure you have, there are two ways
1) Looping

$joined1850_loop = array();
foreach( $states as $stateName => $stateData ) {
    if( $stateData['joined_union'] == 1850 ) {
        $joined1850_loop[$stateName] = $stateData;
    }
}
print_r( $joined1850_loop );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

)
*/

2) Using the array_filter function:

$joined1850 = array_filter(
    $states,
    function( $state ) {
        return $state['joined_union'] == 1850;
    }
);
print_r( $joined1850 );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

)
*/

-

$joined1800s = array_filter(
    $states,
    function ( $state ){
        return $state['joined_union'] >= 1800 && $state['joined_union'] < 1900;
    }
);
print_r( $joined1800s );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

    [Texas] => Array
        (
            [capital] => Austin
            [joined_union] => 1845
            [population_rank] => 2
        )

)
*/
like image 183
meouw Avatar answered Oct 24 '22 04:10

meouw


1: Multidimensional arrays are basically 'arrays of arrays'.

So if we look here:

array("0"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1)

0 is the key, and the array is the value.

Then, inside the value, you have capital as a key, and Sacramento as a value.

2: For removing arrays: Delete an element from an array

3: State names for keys

Yes, you can change that 0, 1, 2 into state names. They become key-values instead of a numbered array. Which makes it much easier to remove exactly the one you want to remove.

like image 29
Wolfman Joe Avatar answered Oct 24 '22 04:10

Wolfman Joe