将多维数组与PHP中的另一个数组进行比较,并从多维数组中获取值
我有一个来自XML文件的多维数组,我想将其与普通数组进行比较。我需要将多维数组中的[tag]名称与另一个数组中的名称进行比较,并从属于该标记的多维数组中获取值将多维数组与PHP中的另一个数组进行比较,并从多维数组中获取值,php,arrays,Php,Arrays,我有一个来自XML文件的多维数组,我想将其与普通数组进行比较。我需要将多维数组中的[tag]名称与另一个数组中的名称进行比较,并从属于该标记的多维数组中获取值 Array ( [0] => Array ( [tag] => DOCUMENT [type] => open [level] => 1 ) [1] => Array (
Array
(
[0] => Array
(
[tag] => DOCUMENT
[type] => open
[level] => 1
)
[1] => Array
(
[tag] => SENDERID
[type] => complete
[level] => 2
[value] => TEST
)
[2] => Array
(
[tag] => SENDERSHORTNAME
[type] => complete
[level] => 2
)
[3] => Array
(
[tag] => RECIPIENTID
[type] => complete
[level] => 2
[value] => VGLEE
)
)
第二个数组,我需要将其与多维数组进行比较:
$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
现在我想检查$compare_数组中的键在多维数组中是否匹配。如果是这样,我想从多维数组中获取值,并从compare_数组中创建一个名为的变量,然后将该值附加到变量中
我做了一个for循环:
for($i = 0; $i < $count; $i++){
if($values[$i]['tag'] == 'SENDERID'){
$SENDER = $values[$i]['value'];
}
if($values[$i]['tag'] == 'RECIPIENTID'){
$RECIPIENTID = $values[$i]['value'];
}
if($values[$i]['tag'] == 'IREF'){
$IREF = $values[$i]['value'];
}
if($values[$i]['tag'] == 'DOCUMENTNUMBER'){
$DOCUMENTNUMBER = $values[$i]['value'];
}
}
($i=0;$i<$count;$i++)的{
如果($values[$i]['tag']=='SENDERID'){
$SENDER=$values[$i]['value'];
}
如果($values[$i]['tag']=='RECIPIENTID'){
$RECIPIENTID=$values[$i]['value'];
}
如果($values[$i]['tag']=='IREF'){
$IREF=$values[$i]['value'];
}
如果($values[$i]['tag']=='DOCUMENTNUMBER'){
$DOCUMENTNUMBER=$values[$i]['value'];
}
}
尝试以下代码:
$array = []; //Complete array to be parsed.
$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
foreach ($array as $value) {
if (in_array($value["tag"], $compare_array)) {
$$value["tag"] = $value["value"];
}
}
它将遍历数组,如果标记
名称与值匹配$compare\u数组
,则用标记名定义变量并用值初始化。尝试以下代码:
$array = []; //Complete array to be parsed.
$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
foreach ($array as $value) {
if (in_array($value["tag"], $compare_array)) {
$$value["tag"] = $value["value"];
}
}
它将遍历数组,如果tag
name与value$compare\u array
匹配,则用tag name定义一个变量并用value初始化。您可以尝试使用array\u in()在这种情况下,下面是示例代码
for($i = 0; $i < $count; $i++){
if(in_array($values[$i]['tag'],$compare_array)){
$value = $values[$i]['value'];
}
}
($i=0;$i<$count;$i++)的{
if(在_数组中($values[$i]['tag'],$compare_数组)){
$value=$values[$i]['value'];
}
}
作为参考您可以尝试使用array_in()在本例中,下面是示例代码
for($i = 0; $i < $count; $i++){
if(in_array($values[$i]['tag'],$compare_array)){
$value = $values[$i]['value'];
}
}
($i=0;$i<$count;$i++)的{
if(在_数组中($values[$i]['tag'],$compare_数组)){
$value=$values[$i]['value'];
}
}
作为示例数据的参考,您可以使用和用于检查
标记
是否存在于$compare\u数组中
如果必须使用$compare\u数组
中的名称创建一个变量,并将该值附加到变量,则可以使用符合预期的标志
值不存在于所有示例数据中,因此您还可以检查是否存在该值
$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
$result = array_reduce($arrays, function($carry, $item) use ($compare_array) {
if(isset($item["value"]) && in_array($item["tag"], $compare_array, true)) {
$carry[$item["tag"]] = $item["value"];
}
return $carry;
});
extract($result, EXTR_OVERWRITE);
echo $SENDERID;
echo $RECIPIENTID;
对于示例数据,您可以使用和来检查标记
是否存在于$compare\u数组中
如果必须使用$compare\u数组
中的名称创建一个变量,并将该值附加到变量,则可以使用符合预期的标志
值不存在于所有示例数据中,因此您还可以检查是否存在该值
$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
$result = array_reduce($arrays, function($carry, $item) use ($compare_array) {
if(isset($item["value"]) && in_array($item["tag"], $compare_array, true)) {
$carry[$item["tag"]] = $item["value"];
}
return $carry;
});
extract($result, EXTR_OVERWRITE);
echo $SENDERID;
echo $RECIPIENTID;
您的试用期在哪里?您可以使用foreach和if@Ghost见更新的问题。这是我第一次做的,但我认为一定有一个更简单的方法。我不知道为什么你会需要这样的东西,但是,你可能会使用变量来实现所有目的,但我建议用标签来分组,将它们保留为一个数组,但使用标记作为keys@Ghost从XML文件中我得到了61个键,我需要一部分键+值。这就是为什么我要列出一个清单并进行比较。如果列表更改,我可以动态地进行更改。它仍然可以工作,如果它们被分组在一个数组中,只要它们有相同的标记,你就可以推送它们,你的测试在哪里?您可以使用foreach和if@Ghost见更新的问题。这是我第一次做的,但我认为一定有一个更简单的方法。我不知道为什么你会需要这样的东西,但是,你可能会使用变量来实现所有目的,但我建议用标签来分组,将它们保留为一个数组,但使用标记作为keys@Ghost从XML文件中我得到了61个键,我需要一部分键+值。这就是为什么我要列出一个清单并进行比较。如果列表更改,我可以动态地进行更改。它仍然可以工作,如果它们被分组在一个数组中,只要它们具有相同的标记,您就可以推送它们,谢谢您的回答。这就是我要找的。为了更好地理解文档,我必须更深入地了解它,但是您在这方面帮了我很多。我要感谢所有其他人的帮助。我还有一个问题。我的数组有索引,但在您的示例中,数组没有索引。如何制作相同的数组?我必须取消设置吗?如果您是指原始数组中的0、1、2和3,它们仍然存在。0是第一项,然后是1等。您可以阅读和索引。谢谢您的回答。这就是我要找的。为了更好地理解文档,我必须更深入地了解它,但是您在这方面帮了我很多。我要感谢所有其他人的帮助。我还有一个问题。我的数组有索引,但在您的示例中,数组没有索引。如何制作相同的数组?我必须取消设置吗?如果您是指原始数组中的0、1、2和3,它们仍然存在。0是第一项,然后是1等。您可以阅读和索引。