多维PHP搜索数组

时间:2016-05-23 04:54:28

标签: php arrays

如何搜索存储在多维中的数组? enter image description here

我想像这样搜索,如果找到则返回1;

search($array,23,164);//search permission with company

6 个答案:

答案 0 :(得分:3)

你需要这样的功能:

$scope.maxSize = 3;
$scope.totalItems = 7;
$scope.currentPage = 1;
$scope.numPerPage = 2;
$scope.paginate = function (value) {
    var begin, end, index;
    begin = ($scope.currentPage - 1) * $scope.numPerPage;
    end = begin + $scope.numPerPage;
    index = $scope.reminderTypes.indexOf(value);
    return (begin <= index && index < end);
};

在这种情况下,如果发现数据将返回true,否则返回false。

在这些情况下,您需要迭代数组中的每个值并检查它们。

答案 1 :(得分:0)

另一种解决方案:

$arr = [
  [
   "company"=>1,
   "permissions" => [
     10,20,30
   ]
 ],
 [
  "company" => 2,
  "permissions" => [
   3,41,5
  ]
 ]
];

function search($arr, $company_id, $perm_id) {
  return array_map(function($item) use ($company_id, $perm_id){

    if ($item['company'] == $company_id ) {
      if( array_search($perm_id, $item["permissions"]) ) {
       return $item;
      }
    }
    return false;
  }, $arr);
}

var_dump(search($arr, 2,41));

答案 2 :(得分:0)

这是适合你的功能

function in_array_r($arrayItem , $array){
    return preg_match('/"'.$arrayItem.'"/i' , json_encode($arrayName));
}

这就是你怎么称呼它

if(in_array_r($item , $array){
    // found!
}

答案 3 :(得分:0)

如果你使用PHP&gt; = 5.5.0,试试这个:

<?php

$array = array(
    array(
        'company'=>2,
        'permission'=>array(45,33,22),
    ),
    array(
        'company'=>6,
        'permission'=>array(21,20,76),
    ),
);

function search($array, $company, $permission)
{
    $companyValues = array_column($array, 'company');
    $permissionValues = array_column($array, 'permission');

    $combinedArray = array_combine($companyValues, $permissionValues);

    if(isset($combinedArray[$company]) && in_array($permission, $combinedArray[$company]))
        return 1;

    return 0;
}

echo search($array, 2, 33);

工作演示:CLICK!

答案 4 :(得分:0)

尝试这个简单的单线搜索

<?php

 $full_array =array('0'=>array('company'=>'23','permission'=>array('0'=>'30','1'=>'31','2'=>'164')),'1'=>array('company'=>'51','permission'=>array('0'=>'52','1'=>'80')));



     $given_company_data='23';
     $given_permission_data='31';

 $i=1;

 foreach($full_array as $row)
 {



     if($row['company']==$given_company_data && in_array($given_permission_data,$row['permission']))
    {

      echo "hi".$i;

    }

$i++;

}


?>

答案 5 :(得分:0)

这是另一种方法: 我们的想法是创建一个查询数组来告诉searchDeep()函数如何查询数组。

这可以用OOP代码代替丑陋的数组。

在此示例中,我们只搜索一个级别,但应添加递归选项。

var name = 'bob';
var someObject = {
  name: 'james',
  someProperty: {
    name: 'sam',
    getName: function() {
      return this.name;
    }
  }
}

var testing = someObject.someProperty.getName;

console.log(testing()); //bob
console.log(testing.call(someObject)); //james
console.log(testing.call(someObject.someProperty)); //sam

console.log('------OR--------')

var testing = someObject.someProperty.getName.bind(someObject);
console.log(testing());
var testing = someObject.someProperty.getName.bind(someObject.someProperty);
console.log(testing());