【问题标题】:Create search => replacement array by key intersection通过关键交集创建搜索 => 替换数组
【发布时间】:2016-03-26 04:07:13
【问题描述】:

我有这个简单的 PHP 代码:

<?php

    $string = "M - T - A - C - B - N - Z.";

    $arrayOne  = ["A", "B", "C", "D"];
    $arrayTwo  = ["D", "E", "F", "G"];


    $length = count($arrayOne);
    for ($i = 0; $i < $length; $i++){
        $replacement[$arrayOne[$i]] = $arrayTwo[$i];
    }

    echo strtr($string, $replacement);

?>

这里我只是使用两个数组中的数字索引来创建一个替换数组,我可以在strtr() 中使用它。

$replacement = [
    "A" => "D",
    "B" => "E",
    "C" => "F",
    "D" => "G",
];

现在我想做同样的事情,只是针对两个数组具有相同键的值。

如果我有:

$k_1  = [ 
    "hat" => "M",
    "new" => "A",
    "bad" => "B",
    "hot" => "C",
    "big" => "D"    
];


$k_2  = [
    "new" => "D",
    "bad" => "E",
    "hot" => "F",
    "err" => "K",
    "big" => "G"
];

我们通过两个数组的键得到如下交集:

[
    "new",
    "bad",
    "hot",
    "big",
] 

现在我想再次使用第一个数组中的值,这些键作为搜索,第二个数组值作为替换,例如

$replacement = [
    "A" => "D",
    "B" => "E",
    "C" => "F",
    "D" => "G",
];

我现在需要如何修改我的代码,它会这样做吗?

【问题讨论】:

    标签: php arrays string intersection


    【解决方案1】:

    从规范化数组开始

    $kk_1=array_intersect($k_1, $k_2);
    $kk_2=array_intersect($k_2, $kk_1);
    ksort($kk_1);
    ksort($kk_2);
    $k_1=array_values($kk_1);
    $k_2=array_values($kk_2);
    

    然后像以前一样继续 - $k_1$k_2 将具有正确的值和顺序。

    【讨论】:

    • @lvk 我误读了你的问题。但欧根几乎有解决办法。您只需要像他一样从数组的两侧获取交集,然后将其组合以进行替换,请参阅:3v4l.org/buWVa
    • 在这个答案中,不需要排序,使用array_combine() 可以轻松创建替换数组。 ^^ 请参见上面的示例链接。
    • @lvk 因为我误读了这个问题,而 Eugen 实际上有解决方案,只是使用了一些不必要的代码,如果他想删除 ksort() 并使用 array_combine(),我将由他决定这会缩短一切。所以如果你愿意,你可以接受他的回答(见:tour)。 (你的问题也很好很清楚:)
    • @Rizier123 与我的 SO 答案一样,我选择了简洁而不是简洁 - 我的印象是,选择的代码序列更清楚发生了什么,然后是更短更高效的版本@987654329 @.
    • 好的,我觉得array_combine() 更清晰、更短,但如果你不这么认为:) 但是仍然没有必要对数组进行排序,重新索引是必要的,但是排序不。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-08-22
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多