Php 根据要检查的键的给定数组,检查多维数组是否包含数组

Php 根据要检查的键的给定数组,检查多维数组是否包含数组,php,arrays,Php,Arrays,我有一个数组包含一组数组 array (size=5) 0 => array (size=7) 'BMS' => array (size=2) 'key' => string 'Boomsoort' (length=9) 'value' => string 'Naaldhout - gewone den' (length=22) 'ONT' => arr

我有一个
数组
包含一组
数组

array (size=5)
  0 => 
    array (size=7)
      'BMS' => 
        array (size=2)
          'key' => string 'Boomsoort' (length=9)
          'value' => string 'Naaldhout - gewone den' (length=22)
      'ONT' => 
        array (size=2)
          'key' => string 'Ontwikkelingsfase' (length=17)
          'value' => string 'Middeloud naaldhout (20 - 60j)' (length=30)
      'SLG' => 
        array (size=2)
          'key' => string 'Sluitingsgraad' (length=14)
          'value' => string 'Meer dan 2/3' (length=12)
      'BED' => 
        array (size=2)
          'key' => string 'Bedrijfsvorm' (length=12)
          'value' => string 'Hooghout' (length=8)
      'NISCODE' => 
        array (size=2)
          'key' => string 'Gemeentecode overeenkomstig het NIS' (length=35)
          'value' => string '46021' (length=5)
      'KLASSE' => 
        array (size=2)
          'key' => string 'Bosclassificatie' (length=16)
          'value' => string 'Bos' (length=3)
      'POLNR' => 
        array (size=2)
          'key' => string 'Polygoonnummer' (length=14)
          'value' => string '32239' (length=5)
  1 => 
    array (size=7)
      'BMS' => 
        array (size=2)
          'key' => string 'Boomsoort' (length=9)
          'value' => string 'Loofhout - eik of Amerikaanse eik' (length=33)
      'ONT' => 
        array (size=2)
          'key' => string 'Ontwikkelingsfase' (length=17)
          'value' => string '10' (length=2)
      'SLG' => 
        array (size=2)
          'key' => string 'Sluitingsgraad' (length=14)
          'value' => string 'Meer dan 2/3' (length=12)
      'BED' => 
        array (size=2)
          'key' => string 'Bedrijfsvorm' (length=12)
          'value' => string 'Hooghout' (length=8)
      'NISCODE' => 
        array (size=2)
          'key' => string 'Gemeentecode overeenkomstig het NIS' (length=35)
          'value' => string '46021' (length=5)
      'KLASSE' => 
        array (size=2)
          'key' => string 'Bosclassificatie' (length=16)
          'value' => string 'Bos' (length=3)
      'POLNR' => 
        array (size=2)
          'key' => string 'Polygoonnummer' (length=14)
          'value' => string '32239' (length=5)
我还有一个
数组
,其中包含一系列
数组
键,在添加新条目时,这些键应用于检查主
数组
(上面的定义)。如果这些键/值已激活-我不想将该项添加到主
数组
。如果一个或多个键/值未激活。。。可以将该数组添加到主集合中

  array (size=7)
    'BMS',       
    'ONT',     
    'SLG',
    'BED',      
    'NISCODE',        
    'KLASSE',     
    'POLNR' 
情景1;添加已在所有已定义键上激活的
数组

array (size=7)
  'BMS' => 
    array (size=2)
      'key' => string 'Boomsoort' (length=9)
      'value' => string 'Loofhout - eik of Amerikaanse eik' (length=33)
  'ONT' => 
    array (size=2)
      'key' => string 'Ontwikkelingsfase' (length=17)
      'value' => string '10' (length=2)
  'SLG' => 
    array (size=2)
      'key' => string 'Sluitingsgraad' (length=14)
      'value' => string 'Meer dan 2/3' (length=12)
  'BED' => 
    array (size=2)
      'key' => string 'Bedrijfsvorm' (length=12)
      'value' => string 'Hooghout' (length=8)
  'NISCODE' => 
    array (size=2)
      'key' => string 'Gemeentecode overeenkomstig het NIS' (length=35)
      'value' => string '46021' (length=5)
  'KLASSE' => 
    array (size=2)
      'key' => string 'Bosclassificatie' (length=16)
      'value' => string 'Bos' (length=3)
  'POLNR' => 
    array (size=2)
      'key' => string 'Polygoonnummer' (length=14)
      'value' => string '32239' (length=5)
情景2;添加一个
数组
,该数组不会对所有定义的键进行激活。请注意,
BMS
键有一个主集合尚不知道的

array (size=7)
  'BMS' => 
    array (size=2)
      'key' => string 'Boomsoort' (length=9)
      'value' => string 'Unadded value' (length=33)
  'ONT' => 
    array (size=2)
      'key' => string 'Ontwikkelingsfase' (length=17)
      'value' => string '10' (length=2)
  'SLG' => 
    array (size=2)
      'key' => string 'Sluitingsgraad' (length=14)
      'value' => string 'Meer dan 2/3' (length=12)
  'BED' => 
    array (size=2)
      'key' => string 'Bedrijfsvorm' (length=12)
      'value' => string 'Hooghout' (length=8)
  'NISCODE' => 
    array (size=2)
      'key' => string 'Gemeentecode overeenkomstig het NIS' (length=35)
      'value' => string '46021' (length=5)
  'KLASSE' => 
    array (size=2)
      'key' => string 'Bosclassificatie' (length=16)
      'value' => string 'Bos' (length=3)
  'POLNR' => 
    array (size=2)
      'key' => string 'Polygoonnummer' (length=14)
      'value' => string '32239' (length=5)
我正在寻找检查主
数组
集合的最佳方法,如果它已经包含一个
数组
,需要检查的键由另一个
数组
给出

我尝试过循环3个
数组
以相互检查-我创建的代码非常健壮和庞大。我想看到一些新的尝试,可以导致我在减少代码行。。。我所拥有的伪代码

/**
* @Param collection = Global collection
* @Param requirekeystocheck = Array keys to check for excistance
* @Param arraytoadd = Array to be added
* @return Boolean
*/
Function checkExcistArrayOfKeysForArray($collection, $requirekeystocheck, $arraytoadd){
    Loop main Array $collection as $collectionItem
        Loop Array $requirekeystocheck with keys to check as $uniqueKey
            Check if main $collectionItem[$uniqueKey] contains $arraytoadd[$uniqueKey] 
                Check if the values are equal (already present)

    If all values in $requirekeystocheck excist in $collectionItem - the item that needs to be added already excists. 
        Return TRUE 
    If not all values excist - the item can be added
        Return TRUE

}

谢谢…

考虑使用php类。这一切看起来都可以很容易地被这样的东西所取代。该类可以如下所示:

class myClass {

    public $bms = '';
    public $ont = '';
    public $slg = '';
    public $bed = '';
    public $niscode = '';
    public $klasse = '';
    public $polnr = '';

    function __construct($cData) {
        $this->bms = $cData[0];
        $this->ont = $cData[1];
        $this->slg = $cData[2];
        $this->bed = $cData[3];
        $this->niscode = $cData[4];
        $this->klasse = $cData[5];
        $this->polnr = $cData[6]
    }

    function equals($obj) {
        // this function receives another instance of the class and checks whether both instances are identical
        if ($obj->bms != $this->bms) { return false; }
        if ($obj->ont!= $this->ont) { return false; }
        if ($obj->slg != $this->slg) { return false; }
        if ($obj->bed != $this->bed) { return false; }
        if ($obj->niscode != $this->niscode) { return false; }
        if ($obj->klasse != $this->klasse) { return false; }
        if ($obj->polnr != $this->polnr) { return false; }
        return true;
    }

}
我唯一不确定的是你一直使用的带有“key”和“value”的小数组。没有办法摆脱它吗?我说不出来,因为我不知道这些价值观的目的。如果你解释他们的感觉,我可能会想象另一个。如果这是不可能的,最好为其创建另一个类(类似于数据类型):

myClass中的所有变量都作为myClass的实例获取数据,如下所示:

$example->bms = new myDatatype("Bomsoort", "Somewhat");
向类添加新值的方式取决于“myClass”变量的类型。以下示例假设您通过“myDatatype”使用了解决方案:

由于这可能会变得非常混乱,请考虑另一个函数,它接受所有必要的值,并完全按照我上面所写的操作。
thingy=新myClass($data)

尝试使用数组搜索方法来搜索带有array\u列的数组 请参阅下面使用会话将项目添加到购物车的解决方案

<?php
 session_start();
 $pr_id = $_REQUEST['id'];
 $quantity = isset($_REQUEST['quantity'])?$_REQUEST['quantity']:1;
 if(isset($_REQUEST['action']) && $_REQUEST['action']=='add')
{
  if(isset($_SESSION['cartitems']))
  {
     //find index of an array if it exits then do not add else add to cart and then
    if (!array_key_exists($pr_id,$_SESSION['cartitems']))
    {
        $_SESSION['cartitems'][$pr_id]['id'] = $pr_id;
        $_SESSION['cartitems'][$pr_id]['quantity'] = $quantity;
    }
   }
  else
  {
    $_SESSION['cartitems'][$pr_id]['id'] = $pr_id;
    $_SESSION['cartitems'][$pr_id]['quantity'] = $quantity;     
  }
  $arr = array();
  $arr['count'] = count($_SESSION['cartitems']);
  $arr['message'] = 'Item successFully added';
  echo json_encode($arr);
 }

感谢您的输入。关键值是动态的。。。它们因上下文而异。我需要一种动态的方式来检查。。。没有将键定义为类参数……您能描述一下您想用它解决的问题吗?如果子数组(“BMS”等)的键需要是动态的,那么使用一个关联数组作为变量的类呢?这个数组的键是'BMS等,它的值是由myDatatype表示的数据。优点:您可以编写返回数组所有索引的函数,检查另一个对象是否相等,或者使用给定数据轻松创建所有对象
$data = array(/* bms */ new myDatatype("key", "value"), ..., /* polnr */ myDatatype("key", "value"));
$example = new myClass($data);
<?php
 session_start();
 $pr_id = $_REQUEST['id'];
 $quantity = isset($_REQUEST['quantity'])?$_REQUEST['quantity']:1;
 if(isset($_REQUEST['action']) && $_REQUEST['action']=='add')
{
  if(isset($_SESSION['cartitems']))
  {
     //find index of an array if it exits then do not add else add to cart and then
    if (!array_key_exists($pr_id,$_SESSION['cartitems']))
    {
        $_SESSION['cartitems'][$pr_id]['id'] = $pr_id;
        $_SESSION['cartitems'][$pr_id]['quantity'] = $quantity;
    }
   }
  else
  {
    $_SESSION['cartitems'][$pr_id]['id'] = $pr_id;
    $_SESSION['cartitems'][$pr_id]['quantity'] = $quantity;     
  }
  $arr = array();
  $arr['count'] = count($_SESSION['cartitems']);
  $arr['message'] = 'Item successFully added';
  echo json_encode($arr);
 }