在数组PHP中搜索

时间:2015-10-10 08:56:36

标签: 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'),
    )

);

现在我怎么写这样的函数---

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

expected output --
'John', 'Jack', 'Jame';

我试过这样---

$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));

但是我返回null,如何在数组中搜索类别为category1的条件,获取所有名称属于那个...

我知道这可能是一个非常愚蠢的问题,但人们有时会陷入一个非常基本的问题。 希望有人知道答案。

3 个答案:

答案 0 :(得分:2)

<?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()));

答案 1 :(得分:2)

只需使用foreach,如

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

Demo

答案 2 :(得分:1)

Bellow代码将帮助您

<?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获取实时输出