【问题标题】:PHP compare multidimensional arraysPHP比较多维数组
【发布时间】:2018-09-16 13:56:39
【问题描述】:

这很难解释,如果不是水,请见谅......

我有 2 个相同的关联数组。

第一个和第二个数组是相同的,所以我这里只放一个:

"parameters": [
            {
                "code": "video",
                "type": "input",
                "labels": {
                    "pt": "Vídeo Youtube",
                    "en": "Youtube video"
                },
                "required": false,
                "purpose": "add",
                "options": null
            }
];

第一个发送来自表单 $_POST 的值到 API,标签以“EN”语言发送。

但是,第二个将值发送到 mysql 数据库,并且标签必须以“PT”语言发送。第二个数组必须仅将标签从 EN 更改为 PT。其余字段值必须与第一个数组发送到外部 API 的值相同。

我正在尝试比较两个数组,并根据第一个数组发送到 API 的内容仅将标签键转换更改为 PT。

示例: 第一个数组有:“代码”=>“视频”,标签=>“EN” 第二个数组必须有:"code" => "video", labels => "PT"

我一直在努力工作……请帮忙……

【问题讨论】:

  • 在数组中再存储一个键,例如label_lang。它将具有ENPT 的值。根据其值,您相应地更新 labellabel_lang 值。
  • 我将 array1 中的所有数据以 JSON 格式发送到单个列。
  • 我在数据库中有另一列存储 array2 数据。在那个 array2 数据列中,我只需要接收 PT 标签而不是 EN。其余数据保持等于array1。

标签: php arrays compare


【解决方案1】:

这里有一个小班给你:

class ArrayDiffer
{
public static function recursiveDiff(array $firstArray, array $secondArray): array
{
    $difference = [];

    foreach ($firstArray as $key => $value) {
        if (\array_key_exists($key, $secondArray)) {
            if (\is_array($value)) {
                $recursiveDiff = self::recursiveDiff($value, $secondArray[$key]);
                if (\count($recursiveDiff)) {
                    $difference[$key] = $recursiveDiff;
                }
            } else {
                if ($value != $secondArray[$key]) {
                    $difference[$key] = $value;
                }
            }
        } else {
            $difference[$key] = $value;
        }
    }

    return $difference;
}
}

这是一个测试,它演示了它是如何工作的:

public function testDiff(): void
{
    $arrayDiffer = new ArrayDiffer();

    $firstArray  = \json_decode(
        '[{
            "code": "video",
            "type": "input",
            "labels": {
                "en": "Youtube video"
            },
            "required": false,
            "purpose": "add",
            "options": null
        }]', true
    );
    $secondArray = \json_decode(
        '[{
            "code": "video",
            "type": "input",
            "labels": {
                "pt": "Vídeo Youtube"
            },
            "required": false,
            "purpose": "add",
            "options": null
        }]', true
    );

    $this->assertEquals(
        [
            0 => [
                'labels' => [
                    'en' => 'Youtube video',
                ],
            ],
        ],
        $arrayDiffer::recursiveDiff($firstArray, $secondArray)
    );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多