How to get certain values from multidimensional arrays?Deleting an element from an array in PHPGet first key in a (possibly) associative array?How do I get PHP errors to display?Get the first element of an arrayHow do I get a YouTube video thumbnail from the YouTube API?How to Sort Multi-dimensional Array by Value?How to get the client IP address in PHPPHP multidimensional array search by valuePHP array delete by value (not key)Reference - What does this error mean in PHP?

Ways to demonstrate ("show-off") contributions as an undergraduate in research

How can I use my cell phone's light as a reading light?

NOLOCK or Read Uncommitted locking / latching behaviours

What are the effects of abstaining from eating a certain flavor?

What exactly is a "murder hobo"?

What does "frozen" mean (e.g. for catcodes)?

How to understand flavors and when to use combination of them?

Examples of fluid (including air) being used to transmit digital data?

How to reclaim personal item I've lent to the office without burning bridges?

Can we share mixing jug/beaker for developer, fixer and stop bath?

Can you create a free-floating MASYU puzzle?

Passwordless authentication - how and when to invalidate a login code

How to have a filled pattern

Quotients of a ring of integers

What's the big deal about the Nazgûl losing their horses?

Is it ok for parents to kiss and romance with each other while their 2- to 8-year-old child watches?

Where are the Wazirs?

Uniform initialization by tuple

Was it ever illegal to name a pig "Napoleon" in France?

What is this burst transmission sequence across the entire band?

How do ballistic trajectories work in a ring world?

What's the difference between a type and a kind?

Shipped package arrived - didn't order, possible scam?

What does "spinning upon the shoals" mean?



How to get certain values from multidimensional arrays?


Deleting an element from an array in PHPGet first key in a (possibly) associative array?How do I get PHP errors to display?Get the first element of an arrayHow do I get a YouTube video thumbnail from the YouTube API?How to Sort Multi-dimensional Array by Value?How to get the client IP address in PHPPHP multidimensional array search by valuePHP array delete by value (not key)Reference - What does this error mean in PHP?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








-1















Here's the data I am working with right now:



 $city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];


I would like to get a list of data associated with only "name" key.



I would also like to show the data associated with "area" key once the user go for the corresponding "name".



It would be helpful if there were any suggestion on how to better store this data for frequent usage in code.










share|improve this question






















  • What exactly are you expecting? Input and Output?

    – Praveen Kumar Purushothaman
    Mar 25 at 20:37

















-1















Here's the data I am working with right now:



 $city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];


I would like to get a list of data associated with only "name" key.



I would also like to show the data associated with "area" key once the user go for the corresponding "name".



It would be helpful if there were any suggestion on how to better store this data for frequent usage in code.










share|improve this question






















  • What exactly are you expecting? Input and Output?

    – Praveen Kumar Purushothaman
    Mar 25 at 20:37













-1












-1








-1








Here's the data I am working with right now:



 $city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];


I would like to get a list of data associated with only "name" key.



I would also like to show the data associated with "area" key once the user go for the corresponding "name".



It would be helpful if there were any suggestion on how to better store this data for frequent usage in code.










share|improve this question














Here's the data I am working with right now:



 $city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];


I would like to get a list of data associated with only "name" key.



I would also like to show the data associated with "area" key once the user go for the corresponding "name".



It would be helpful if there were any suggestion on how to better store this data for frequent usage in code.







php






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 25 at 20:35









satancorpsesatancorpse

633 silver badges14 bronze badges




633 silver badges14 bronze badges












  • What exactly are you expecting? Input and Output?

    – Praveen Kumar Purushothaman
    Mar 25 at 20:37

















  • What exactly are you expecting? Input and Output?

    – Praveen Kumar Purushothaman
    Mar 25 at 20:37
















What exactly are you expecting? Input and Output?

– Praveen Kumar Purushothaman
Mar 25 at 20:37





What exactly are you expecting? Input and Output?

– Praveen Kumar Purushothaman
Mar 25 at 20:37












2 Answers
2






active

oldest

votes


















3














As long as the names are unique you can do this simple trick:



Example 1



$city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];

$names = array_column($city, null, 'name');

print_r($names);


Output



Array
(
[Dhaka] => Array
(
[name] => Dhaka
[areas] => Array
(
[0] => d1
[1] => d2
[2] => d3
)

)

[Chittagong] => Array
(
[name] => Chittagong
[areas] => Array
(
[0] => c1
[1] => c2
[2] => c3
)

)

[Sylhet] => Array
(
[name] => Sylhet
[areas] => Array
(
[0] => s1
[1] => s2
[2] => s3
)

)

[Barisal] => Array
(
[name] => Barisal
[areas] => Array
(
[0] => b1
[1] => b2
[2] => b3
)

)

[Khulna] => Array
(
[name] => Khulna
[areas] => Array
(
[0] => k1
[1] => k2
[2] => k3
)

)

[Rajshahi] => Array
(
[name] => Rajshahi
[areas] => Array
(
[0] => r1
[1] => r2
[2] => r3
)

)

)


Now you can lookup by name



print_r($city['Chittagong']['areas']); //["c1", "c2", "c3"]


If the names are not guaranteed to be unique, you'll have to build them using foreach, like this:



Example 2



$city = [
[
"name" => "Dhaka",
"areas" => ["d1", "d2", "d3"]
],
[
"name" => "Chittagong",
"areas" => ["c1", "c2", "c3"]
],
[ /*--- ADDED to show duplication ---- */
"name" => "Chittagong",
"areas" => ["x1", "x2", "x3"]
],
[
"name" => "Sylhet",
"areas" => ["s1", "s2", "s3"]
],
[
"name" => "Barisal",
"areas" => ["b1", "b2", "b3"]
],
[
"name" => "Khulna",
"areas" => ["k1", "k2", "k3"]
],
[
"name" => "Rajshahi",
"areas" => ["r1", "r2", "r3"]
],
];


$output = [];

foreach($city as $k=>$v)
$k = $v['name'];
if(!isset($output[$k])) $output[$k] = []; //initialize

$output[$k][] = $v;


print_r($output);


Which will give you something like this:



Array
(
[Dhaka] => Array
(
[0] => Array
(
[name] => Dhaka
[areas] => Array
(
[0] => d1
[1] => d2
[2] => d3
)

)

)

[Chittagong] => Array
(
[0] => Array
(
[name] => Chittagong
[areas] => Array
(
[0] => c1
[1] => c2
[2] => c3
)

)

[1] => Array
(
[name] => Chittagong
[areas] => Array
(
[0] => x1
[1] => x2
[2] => x3
)

)

)

[Sylhet] => Array( ... )


As you can see this adds an extra level in to contain the multiple occurrences. Of course you could just combine the area when duplicate (in the foreach). But that is up to you.



Here is a quick example of that (same data as above):



Example 3



$output = [];

foreach($city as $k=>$v)
$k = $v['name'];
if(!isset($output[$k])) $output[$k] = []; //initialize

$output[$k] = array_merge($output[$k], $v['areas']); //merge the areas


print_r($output);


Output



Array
(
[Dhaka] => Array
(
[0] => d1
[1] => d2
[2] => d3
)

[Chittagong] => Array
(
[0] => c1
[1] => c2
[2] => c3
[3] => x1
[4] => x2
[5] => x3
)
....
)


If it was me, I would go with the last one, just because of the simplicity it will have working with it later.



PS. if your pulling data out of a Database with PDO, you can use $stmt->fetchAll(PDO::FETCH_GROUP) which will give you something like the second example automatically. The only caveat here is that the name column is the first one selected in the Query, which is the column it will group on.



Cheers.






share|improve this answer




















  • 1





    Your "echo" will return Array :-) but +1 for being the best solution

    – Andreas
    Mar 25 at 20:59



















2














If you're just trying to loop through the list of cities and get the names you can just use a foreach loop. If you need something beyond this try to define your question a little more.



foreach ($city as $c) 
echo $c["name"];






share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55346020%2fhow-to-get-certain-values-from-multidimensional-arrays%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3














    As long as the names are unique you can do this simple trick:



    Example 1



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];

    $names = array_column($city, null, 'name');

    print_r($names);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    [Chittagong] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [Sylhet] => Array
    (
    [name] => Sylhet
    [areas] => Array
    (
    [0] => s1
    [1] => s2
    [2] => s3
    )

    )

    [Barisal] => Array
    (
    [name] => Barisal
    [areas] => Array
    (
    [0] => b1
    [1] => b2
    [2] => b3
    )

    )

    [Khulna] => Array
    (
    [name] => Khulna
    [areas] => Array
    (
    [0] => k1
    [1] => k2
    [2] => k3
    )

    )

    [Rajshahi] => Array
    (
    [name] => Rajshahi
    [areas] => Array
    (
    [0] => r1
    [1] => r2
    [2] => r3
    )

    )

    )


    Now you can lookup by name



    print_r($city['Chittagong']['areas']); //["c1", "c2", "c3"]


    If the names are not guaranteed to be unique, you'll have to build them using foreach, like this:



    Example 2



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [ /*--- ADDED to show duplication ---- */
    "name" => "Chittagong",
    "areas" => ["x1", "x2", "x3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];


    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k][] = $v;


    print_r($output);


    Which will give you something like this:



    Array
    (
    [Dhaka] => Array
    (
    [0] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    )

    [Chittagong] => Array
    (
    [0] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [1] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => x1
    [1] => x2
    [2] => x3
    )

    )

    )

    [Sylhet] => Array( ... )


    As you can see this adds an extra level in to contain the multiple occurrences. Of course you could just combine the area when duplicate (in the foreach). But that is up to you.



    Here is a quick example of that (same data as above):



    Example 3



    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k] = array_merge($output[$k], $v['areas']); //merge the areas


    print_r($output);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    [Chittagong] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    [3] => x1
    [4] => x2
    [5] => x3
    )
    ....
    )


    If it was me, I would go with the last one, just because of the simplicity it will have working with it later.



    PS. if your pulling data out of a Database with PDO, you can use $stmt->fetchAll(PDO::FETCH_GROUP) which will give you something like the second example automatically. The only caveat here is that the name column is the first one selected in the Query, which is the column it will group on.



    Cheers.






    share|improve this answer




















    • 1





      Your "echo" will return Array :-) but +1 for being the best solution

      – Andreas
      Mar 25 at 20:59
















    3














    As long as the names are unique you can do this simple trick:



    Example 1



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];

    $names = array_column($city, null, 'name');

    print_r($names);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    [Chittagong] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [Sylhet] => Array
    (
    [name] => Sylhet
    [areas] => Array
    (
    [0] => s1
    [1] => s2
    [2] => s3
    )

    )

    [Barisal] => Array
    (
    [name] => Barisal
    [areas] => Array
    (
    [0] => b1
    [1] => b2
    [2] => b3
    )

    )

    [Khulna] => Array
    (
    [name] => Khulna
    [areas] => Array
    (
    [0] => k1
    [1] => k2
    [2] => k3
    )

    )

    [Rajshahi] => Array
    (
    [name] => Rajshahi
    [areas] => Array
    (
    [0] => r1
    [1] => r2
    [2] => r3
    )

    )

    )


    Now you can lookup by name



    print_r($city['Chittagong']['areas']); //["c1", "c2", "c3"]


    If the names are not guaranteed to be unique, you'll have to build them using foreach, like this:



    Example 2



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [ /*--- ADDED to show duplication ---- */
    "name" => "Chittagong",
    "areas" => ["x1", "x2", "x3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];


    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k][] = $v;


    print_r($output);


    Which will give you something like this:



    Array
    (
    [Dhaka] => Array
    (
    [0] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    )

    [Chittagong] => Array
    (
    [0] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [1] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => x1
    [1] => x2
    [2] => x3
    )

    )

    )

    [Sylhet] => Array( ... )


    As you can see this adds an extra level in to contain the multiple occurrences. Of course you could just combine the area when duplicate (in the foreach). But that is up to you.



    Here is a quick example of that (same data as above):



    Example 3



    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k] = array_merge($output[$k], $v['areas']); //merge the areas


    print_r($output);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    [Chittagong] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    [3] => x1
    [4] => x2
    [5] => x3
    )
    ....
    )


    If it was me, I would go with the last one, just because of the simplicity it will have working with it later.



    PS. if your pulling data out of a Database with PDO, you can use $stmt->fetchAll(PDO::FETCH_GROUP) which will give you something like the second example automatically. The only caveat here is that the name column is the first one selected in the Query, which is the column it will group on.



    Cheers.






    share|improve this answer




















    • 1





      Your "echo" will return Array :-) but +1 for being the best solution

      – Andreas
      Mar 25 at 20:59














    3












    3








    3







    As long as the names are unique you can do this simple trick:



    Example 1



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];

    $names = array_column($city, null, 'name');

    print_r($names);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    [Chittagong] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [Sylhet] => Array
    (
    [name] => Sylhet
    [areas] => Array
    (
    [0] => s1
    [1] => s2
    [2] => s3
    )

    )

    [Barisal] => Array
    (
    [name] => Barisal
    [areas] => Array
    (
    [0] => b1
    [1] => b2
    [2] => b3
    )

    )

    [Khulna] => Array
    (
    [name] => Khulna
    [areas] => Array
    (
    [0] => k1
    [1] => k2
    [2] => k3
    )

    )

    [Rajshahi] => Array
    (
    [name] => Rajshahi
    [areas] => Array
    (
    [0] => r1
    [1] => r2
    [2] => r3
    )

    )

    )


    Now you can lookup by name



    print_r($city['Chittagong']['areas']); //["c1", "c2", "c3"]


    If the names are not guaranteed to be unique, you'll have to build them using foreach, like this:



    Example 2



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [ /*--- ADDED to show duplication ---- */
    "name" => "Chittagong",
    "areas" => ["x1", "x2", "x3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];


    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k][] = $v;


    print_r($output);


    Which will give you something like this:



    Array
    (
    [Dhaka] => Array
    (
    [0] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    )

    [Chittagong] => Array
    (
    [0] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [1] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => x1
    [1] => x2
    [2] => x3
    )

    )

    )

    [Sylhet] => Array( ... )


    As you can see this adds an extra level in to contain the multiple occurrences. Of course you could just combine the area when duplicate (in the foreach). But that is up to you.



    Here is a quick example of that (same data as above):



    Example 3



    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k] = array_merge($output[$k], $v['areas']); //merge the areas


    print_r($output);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    [Chittagong] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    [3] => x1
    [4] => x2
    [5] => x3
    )
    ....
    )


    If it was me, I would go with the last one, just because of the simplicity it will have working with it later.



    PS. if your pulling data out of a Database with PDO, you can use $stmt->fetchAll(PDO::FETCH_GROUP) which will give you something like the second example automatically. The only caveat here is that the name column is the first one selected in the Query, which is the column it will group on.



    Cheers.






    share|improve this answer















    As long as the names are unique you can do this simple trick:



    Example 1



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];

    $names = array_column($city, null, 'name');

    print_r($names);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    [Chittagong] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [Sylhet] => Array
    (
    [name] => Sylhet
    [areas] => Array
    (
    [0] => s1
    [1] => s2
    [2] => s3
    )

    )

    [Barisal] => Array
    (
    [name] => Barisal
    [areas] => Array
    (
    [0] => b1
    [1] => b2
    [2] => b3
    )

    )

    [Khulna] => Array
    (
    [name] => Khulna
    [areas] => Array
    (
    [0] => k1
    [1] => k2
    [2] => k3
    )

    )

    [Rajshahi] => Array
    (
    [name] => Rajshahi
    [areas] => Array
    (
    [0] => r1
    [1] => r2
    [2] => r3
    )

    )

    )


    Now you can lookup by name



    print_r($city['Chittagong']['areas']); //["c1", "c2", "c3"]


    If the names are not guaranteed to be unique, you'll have to build them using foreach, like this:



    Example 2



    $city = [
    [
    "name" => "Dhaka",
    "areas" => ["d1", "d2", "d3"]
    ],
    [
    "name" => "Chittagong",
    "areas" => ["c1", "c2", "c3"]
    ],
    [ /*--- ADDED to show duplication ---- */
    "name" => "Chittagong",
    "areas" => ["x1", "x2", "x3"]
    ],
    [
    "name" => "Sylhet",
    "areas" => ["s1", "s2", "s3"]
    ],
    [
    "name" => "Barisal",
    "areas" => ["b1", "b2", "b3"]
    ],
    [
    "name" => "Khulna",
    "areas" => ["k1", "k2", "k3"]
    ],
    [
    "name" => "Rajshahi",
    "areas" => ["r1", "r2", "r3"]
    ],
    ];


    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k][] = $v;


    print_r($output);


    Which will give you something like this:



    Array
    (
    [Dhaka] => Array
    (
    [0] => Array
    (
    [name] => Dhaka
    [areas] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    )

    )

    [Chittagong] => Array
    (
    [0] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    )

    )

    [1] => Array
    (
    [name] => Chittagong
    [areas] => Array
    (
    [0] => x1
    [1] => x2
    [2] => x3
    )

    )

    )

    [Sylhet] => Array( ... )


    As you can see this adds an extra level in to contain the multiple occurrences. Of course you could just combine the area when duplicate (in the foreach). But that is up to you.



    Here is a quick example of that (same data as above):



    Example 3



    $output = [];

    foreach($city as $k=>$v)
    $k = $v['name'];
    if(!isset($output[$k])) $output[$k] = []; //initialize

    $output[$k] = array_merge($output[$k], $v['areas']); //merge the areas


    print_r($output);


    Output



    Array
    (
    [Dhaka] => Array
    (
    [0] => d1
    [1] => d2
    [2] => d3
    )

    [Chittagong] => Array
    (
    [0] => c1
    [1] => c2
    [2] => c3
    [3] => x1
    [4] => x2
    [5] => x3
    )
    ....
    )


    If it was me, I would go with the last one, just because of the simplicity it will have working with it later.



    PS. if your pulling data out of a Database with PDO, you can use $stmt->fetchAll(PDO::FETCH_GROUP) which will give you something like the second example automatically. The only caveat here is that the name column is the first one selected in the Query, which is the column it will group on.



    Cheers.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Mar 25 at 21:10

























    answered Mar 25 at 20:55









    ArtisticPhoenixArtisticPhoenix

    19.2k1 gold badge14 silver badges28 bronze badges




    19.2k1 gold badge14 silver badges28 bronze badges







    • 1





      Your "echo" will return Array :-) but +1 for being the best solution

      – Andreas
      Mar 25 at 20:59













    • 1





      Your "echo" will return Array :-) but +1 for being the best solution

      – Andreas
      Mar 25 at 20:59








    1




    1





    Your "echo" will return Array :-) but +1 for being the best solution

    – Andreas
    Mar 25 at 20:59






    Your "echo" will return Array :-) but +1 for being the best solution

    – Andreas
    Mar 25 at 20:59














    2














    If you're just trying to loop through the list of cities and get the names you can just use a foreach loop. If you need something beyond this try to define your question a little more.



    foreach ($city as $c) 
    echo $c["name"];






    share|improve this answer



























      2














      If you're just trying to loop through the list of cities and get the names you can just use a foreach loop. If you need something beyond this try to define your question a little more.



      foreach ($city as $c) 
      echo $c["name"];






      share|improve this answer

























        2












        2








        2







        If you're just trying to loop through the list of cities and get the names you can just use a foreach loop. If you need something beyond this try to define your question a little more.



        foreach ($city as $c) 
        echo $c["name"];






        share|improve this answer













        If you're just trying to loop through the list of cities and get the names you can just use a foreach loop. If you need something beyond this try to define your question a little more.



        foreach ($city as $c) 
        echo $c["name"];







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 25 at 20:38









        LulceltechLulceltech

        1,2733 silver badges14 bronze badges




        1,2733 silver badges14 bronze badges



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55346020%2fhow-to-get-certain-values-from-multidimensional-arrays%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

            Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

            Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript