【问题标题】:Get intersect values in a array from Multi-dimensional array从多维数组中获取数组中的相交值
【发布时间】:2020-01-07 10:29:09
【问题描述】:

我有这个数组

$data = json_decode('[
        [
            ["Monaco Chain"],
            ["Monaco Diamond Cut","Monaco Plain","Monaco Swarovski"],
            ["11.50 mm","13.50 mm","15.50 mm","17.50 mm","6.50 mm","8.00 mm","9.50 mm"],
        ["18.00","20.00","22.00","24.00","26.00","28.00","30.00","7.00","7.50","7.75","8.00","8.25","8.50","9.00","7.25","8.75","9.50","16.00","9.25"],
            ["ROSE","WHITE","YELLOW"],
            ["10","14","18","21"],
            ["New","Long"],
            ["No","Yes","N/A"],
            ["No","Yes","N/A"]
        ],
        [
            ["Monaco Chain"],
            ["Monaco Diamond Cut","Monaco Plain"],
            ["6.50 mm"],
            ["16.00","18.00","20.00","22.00","24.00","26.00","28.00","30.00","7.50","8.00","9.00"],
            ["ROSE","WHITE","YELLOW"],
            ["10","14","18","21"],
            ["New"],
            ["No","Yes","N/A"],
            ["No","Yes","N/A"]
        ],[
            ["Monaco Chain"],
            ["Monaco Diamond Cut","Monaco Swarovski"],
            ["11.50 mm","13.50 mm","15.50 mm","17.50 mm","6.50 mm","8.00 mm","9.50 mm"],
            ["18.00","20.00","22.00","24.00","26.00","28.00","30.00","7.00","7.50","7.75","8.00","8.25","8.50","9.00","7.25","8.75","9.50","16.00","9.25"],
            ["ROSE","WHITE","YELLOW"],
            ["10","14","18","21"],
            ["New","Long"],
            ["No"],
            ["No","Yes"]
        ]
    ]
    ', true);

主数组中的子数组可以增加,目前有3个子数组。

如何从主数组中获取相交值作为数组。

例如,“Monaco Swarovski”、“Long”值不应该在 intersect 数组上,因为:这些值并不存在于所有子数组中。

输出数组(相交)结构必须像主数组格式的子数组。

对于这个主数组,输出应该是这样的:

$data = json_decode('
    [
        [
            ["Monaco Chain"],
            ["Monaco Diamond Cut"],
            ["6.50 mm"],
            ["18.00","20.00","22.00","24.00","26.00","28.00","30.00","7.50","8.00","9.00"],
            ["ROSE","WHITE","YELLOW"],
            ["10","14","18","21"],
            ["New"],
            ["No"],
            ["No","Yes"]
        ]
    ]', true);

所以,只需将相同子数组结构中的值相交即可。

我在stackoverflow上尝试了很多方法,但其中一些只适用于两个子数组,其中一些没有给出完全正确的交集。

我认为我们需要为解决方案正确使用相交函数。

感谢您的帮助。

【问题讨论】:

  • 开发人员的定义:将接受其他人代码的建议和指导,但准备最终自己编写一些东西来定制其他代码,以完全按照他们的意愿去做。
  • 我只是需要一点帮助,请谅解。

标签: php arrays multidimensional-array array-intersect


【解决方案1】:

为一个临时数组中的所有子数组收集相应的子子数组,并使用扩展运算符将其提供给 array_intersect,您可以这样做:

$subArrayCount = count($data);
$subSubArrayCount = count($data[0]);
$result = [];

for($i=0; $i<$subSubArrayCount; ++$i) {
  $temp = [];
  for($j=0; $j<$subArrayCount; ++$j) {
    $temp[] = $data[$j][$i];
  }
  $result[] = array_intersect(...$temp);
}
var_dump($result);

https://3v4l.org/0OcbN

【讨论】:

  • (您的示例结果似乎是错误的,["18.00","20.00","22.00","24.00","26.00","28.00","30.00","7.50","8.00","9.00"] 缺少值 16.00,该值也包含在所有第 4 个子子数组中。)
  • 感谢您的回答@misorude,您的代码很棒但是,当我使用您的代码时:一些子数组转换为对象,我们可以将所有子数组作为数组吗?
  • 不确定你的意思;图片链接好像失效了。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多