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