简体   繁体   中英

search within array PHP

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 fetch all the names belongs to that ...

i know it can be a really dumb question, but people sometime get stuck on a really basic problem. Hope someone knows the answer.

<?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';
$pluck = 'name';

var_dump( array_reduce($data['CATEGORY 1'], function($result, $array) use ( $pluck ) {
    isset($array[$pluck]) && $result[] = $array[$pluck];
    return $result;
}, array()));

Simply use foreach like as

$result = [];
foreach($data as $value){
  foreach($value as $k => $v){
      if($v['category'] == 'CATEGORY1')
        $result[] = $v['name'];
  }
}
print_r($result);

Demo

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM