检查数组中是否存在值并从多维数组

时间:2017-08-21 08:16:59

标签: php arrays

我在PHP数组下面:

Array ( 
       [0] => Array ( [policy_id] => 1 [category_id] => 5 [limit_amount] => 11.00 [limit_amount2] => 23.00 ), 
       [1] => Array ( [policy_id] => 1 [category_id] => 7 [limit_amount] => 32.00 [limit_amount2] => 23.00 ), 
       [2] => Array ( [policy_id] => 1 [category_id] => 4 [limit_amount] => 12.00 [limit_amount2] => 12.00 ) )

现在我想做两件事:

  1. 想要检查此数组中是否存在category_id = 7,以及是否存在。
  2. 然后我想从这个多维数组中获取完整的数组,
  3. 示例,如果category_id = 7在数组中,则应输出

    Array ([policy_id] => 1 ,
           [category_id] => 7 ,
           [limit_amount] => 32.00,
           [limit_amount2] => 23.00 )
    

    我尝试使用in_array(),但无法获得所需的值,

    感谢您的帮助,

4 个答案:

答案 0 :(得分:5)

您可以在执行array_search之前使用array_column(我假设您的数据位于$array中):

$match = $array[array_search(7, array_column($array, "category_id"))];

如果您需要首先检查条目是否确实存在,那么首先检查array_search的返回值,并在找不到值时返回一些区别对象,例如: false

$index = array_search(7, array_column($array, "category_id"));
$match = $index === false ? false : $array[$index];

答案 1 :(得分:1)

有多种方法可以实现您的目标。这是一个使用array_filter()的解决方案:

$input = array(
    array('policy_id' => 1 , 'category_id' => 5 , 'limit_amount' => 11.00 , 'limit_amount2' => 23.00, ),
    array('policy_id' => 1 , 'category_id' => 7 , 'limit_amount' => 32.00 , 'limit_amount2' => 23.00, ),
    array('policy_id' => 1 , 'category_id' => 4 , 'limit_amount' => 12.00 , 'limit_amount2' => 12.00, ),
);

$categoryId = 7;
$output = array_filter(
    $input,
    function (array $item) use ($categoryId) {
        return $item['category_id'] == $categoryId;
    }
);
print_r($output);

输出结果为:

Array
(
    [1] => Array
        (
            [policy_id] => 1
            [category_id] => 7
            [limit_amount] => 32
            [limit_amount2] => 23
        )
)

上面的代码会找到$input7 category_id $input的所有条目,这些条目与$output中的原始密钥相关联。

您可以使用foreach ($output as item) { ... }枚举print_r(current($output)); ,或者,如果您只需要第一个匹配,则可以使用current()来获取它:

Array
(
    [policy_id] => 1
    [category_id] => 7
    [limit_amount] => 32
    [limit_amount2] => 23
)

产生

$categoryId = 1;

<强>更新

如果在输入列表中找不到该项(f.e。$output时),array()是一个空数组(foreach)。它仍然可以使用current($output)进行枚举,但FALSE会返回$categoryId = 7; $output = current(array_filter( $input, function (array $item) use ($categoryId) { return $item['category_id'] == $categoryId; } ));

总而言之,代码:

$output

FALSE放入找到的第一个项目,如果没有,则放入Sub foo() Dim pt As PivotTable Dim cf As CubeField Set pt = ActiveSheet.PivotTables("Tb1") For Each cf In pt.CubeFields If cf.Orientation = xlColumnField Then cf.Orientation = xlHidden Next cf End Sub

答案 2 :(得分:0)

有了这个问题,你可以使用foreach数组来检查它是否存在! 我已经为此做了一个功能:

function checkArray($cat_id){
  foreach($arr as $index => $value){
    if($value->category_id == $cat_id){
      return $arr[$index];
    }
    return false;
  }
}

如果$cat_id存在,则返回数组需要,如果不存在则返回false

答案 3 :(得分:0)

$val = 7;
$key = 'category_id';

foreach ($array as $item){
    if (isset($item[$key]) && $item[$key] === $val)
            print_r($item);
   }