【问题标题】:Duplicate by changing the array combination in PHP通过更改 PHP 中的数组组合进行复制
【发布时间】:2019-09-23 12:08:27
【问题描述】:

我有一个产品变体组合 ID。连字符 (-) 字符串之间的字符代表变体选项 id。

我想为基于主要组合 ID 的免费变体选项制作其他 ID 的副本。

我的代码:

function find_replace($array, $find, $replace){
    $array = array_replace($array,
        array_fill_keys(
            array_keys($array, $find),
            $replace
        )
    );
    return $array;
}

function get_var_key($array, $value){
    $key_name=false;

    foreach ($array as $n=>$c)
    if (in_array($value, $c)) {
        $key_name=$n;
        break;
    }

    return $key_name;
}

$get_free_keys = array(
    "var1" => array(
        "free1", 
        "free2"
    ),
    "var2" => array(
        "free3", 
        "free4"
        )
);
$main_combine = "a1-b1-free1-c1-d1-free3";

$main_combine_explode = explode("-", $main_combine);

for($i=0; $i < count($main_combine_explode); $i++){
    $get_key_by_value = get_var_key($get_free_keys, 
    $main_combine_explode[$i]); // return "var1" or "var2"

    foreach($get_free_keys[$get_key_by_value] as $values){
        $find_combine = find_replace($main_combine_explode, 
        $main_combine_explode[$i], $values);
        $combines[] = implode("-", $find_combine);
    }
}


print_r($combines); 

错误的结果:

Array
(
    [0] => a1-b1-free1-c1-d1-free3 // main combine (ok)
    [1] => a1-b1-free2-c1-d1-free3 // ok
    [2] => a1-b1-free1-c1-d1-free3 // wrong
    [3] => a1-b1-free1-c1-d1-free4 // wrong
)

结果不正确

我想得到以下结果:

Array
(
    [0] => a1-b1-free1-c1-d1-free3-e1 // $main_combine
    [1] => a1-b1-free1-c1-d1-free4-e1
    [2] => a1-b1-free2-c1-d1-free3-e1
    [3] => a1-b1-free2-c1-d1-free4-e1
) 

Array
(
    [var1] => Array
        (
            [0] => a1-b1-free1-c1-d1-free3 // $main_combine
            [1] => a1-b1-free2-c1-d1-free3
        )
    [var2] => Array
        (
            [0] => a1-b1-free1-c1-d1-free4
            [1] => a1-b1-free2-c1-d1-free4
        )
) 

谢谢。

【问题讨论】:

  • 这不是代码编写或研究服务。所以请展示你的尝试。
  • 您发布您尝试过的内容,我将发布解决方案 - 交易? (提示:这可能会派上用场 - gist.github.com/cecilemuller/4688876
  • 对不起,我忘了添加我自己的代码。感谢您的回复。我添加了我的代码。 @04FS
  • 对不起,我忘了添加我自己的代码。感谢您的回复。我添加了我的代码。 @dWinder

标签: php arrays combinations


【解决方案1】:

您可以使用get_combinationsstr-replace 并执行以下操作:

$template = "a1-b1-@FIRST@-c1-d1-@SECOND@-e1";
foreach (get_combinations($get_free_keys) as $e) {
    $res[] = str_replace(['@FIRST@', '@SECOND@'], $e, $template);
}

现场示例:3v4l

【讨论】:

  • 正是我想要的!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多