Search code examples
phparraysmultidimensional-arrayarray-column

Get a column of values from the specified subarray of a multidimensional array


I have an array which contains some data. for example:

$data = array(
    'CATEGORY 1' => array(
        array('id'=> 0, 'name' => 'John', 'category' => 'CATEGORY1'),
        array('id'=> 1, 'name' => 'Jack', 'category' => 'CATEGORY1'),
        array('id'=> 2, 'name' => 'Jame', 'category' => 'CATEGORY1'),
    ),
    'CATEGORY 2' => array(
        array('id'=> 0, 'name' => 'Mile', 'category' => 'CATEGORY2'),
        array('id'=> 1, 'name' => 'Mike', 'category' => 'CATEGORY2'),
        array('id'=> 2, 'name' => 'Matt', 'category' => 'CATEGORY2'),
    )
);

Now how can I write a function like this:

if ($post ='CATEGORY 1') {
    // filter all the name where category => CATEGORY1
}

Expected output:

['John', 'Jack', 'Jame']

I have tried like so:

$filters = array(
    "id" => array(
        "filter" => FILTER_VALIDATE_INT,
        "flags" => FILTER_FORCE_ARRAY,
        "options" => array(
            "min_range" => 1,
            "max_range" => 120
        )
    ),
    "name" => array(
        "filter" => FILTER_CALLBACK,
        "options" => "ucwords"                   
    ),
    "category" => array(
        "filter" => FILTER_CALLBACK,
        "options" => "ucwords"
    )
);

print_r(filter_var_array($data, $filters));

But that returns me null. How can I search within the array with the condition where category is category1 and fetch all the names which belongs to that?


Solution

  • Bellow code will help you out

    <?php
    $data = array(
    
        'CATEGORY 1' => array(
            array('id'=> 0, 'name' => 'John', 'category' => 'CATEGORY1'),
            array('id'=> 1, 'name' => 'Jack', 'category' => 'CATEGORY1'),
            array('id'=> 2, 'name' => 'Jame', 'category' => 'CATEGORY1'),
        ),
        'CATEGORY 2' => array(
            array('id'=> 0, 'name' => 'Mile', 'category' => 'CATEGORY2'),
            array('id'=> 1, 'name' => 'Mike', 'category' => 'CATEGORY2'),
            array('id'=> 2, 'name' => 'Matt', 'category' => 'CATEGORY2'),
        )
    
    );
    
    $post='CATEGORY 1';
    $elements=$data[$post];
    $names=array();
    foreach ($elements as $ele) {
    $names[]=$ele['name'];
    }
    
    print_r($names);
    

    click here get realtime output