使用array_diff()的多维和单个数组

时间:2014-05-07 08:29:48

标签: php arrays multidimensional-array

概述将会发生什么,为了举例,我提供了电子邮件地址,名字和姓氏。如果用户想要将其包含在导入中,则每个列都有一个复选框。

enter image description here

在此示例中,Last Name不应包括在内。因此,当我通过提交时,复选框的数据就像这样输出。

Array
(
    [0] => Email Address
    [1] => First Name
)

哪个是正确的,那么我想要发生是删除原始数据(多维数组)上的Last Name,不幸的是,array_diff()不起作用,或者否则我可能做错了什么。

我有这两个数组

$mapping_import_value = $_SESSION['mapping_import_value'];
$arr_import_column = $_POST['import_column'];

映射导入值:多维数组

Array
(
    [Email Address] => Array
        (
            [0] => email11@gmail.com
            [1] => email12@gmail.com
            [2] => email13@gmail.com
        )

    [First Name] => Array
        (
            [0] => Guy 11
            [1] => Guy 12
            [2] => Guy 13
        )

    [Last Name] => Array
        (
            [0] => Stand 11
            [1] => Stand 12
            [2] => Stand 13
        )

)

然后

Arr导入列:单个数组

Array
(
    [0] => Email Address
    [1] => First Name
)

所以它就像是,2个数组将匹配,如果某些东西不匹配(姓氏),它将被删除,包括它的孩子。所以任何帮助都会很好。 :d

3 个答案:

答案 0 :(得分:3)

您可以在$arr_import_column上使用array_interesect_key()array_flip()

$x = array_intersect_key($mapping_import_value, array_flip($arr_import_column));

这基本上会返回$mapping_import_value$arr_import_column中存在密钥的所有条目

答案 1 :(得分:2)

使用另一个变量并迭代如下。

$mapping_import_value_another = array();

foreach($arr_import_column as $v)
{
    $mapping_import_value_another[$v] = $mapping_import_value[$v];
}

因此$mapping_import_value_another只会选择列数据。

答案 2 :(得分:1)

我认为你必须建立一个功能来检查这个:

function areArraysEqual($arrImportColumn, $mappingImportValue)
{
  foreach($mappingImportValue as $key=>$values)
  {
    if (!in_array($arrImportColumn,$key))
    {
       unset($mappingImportValue[$key]);
    }
  }
}

此功能将删除$mappingImportValue

中未包含的$arrImportColumn中的所有密钥