Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于字符串开头组合PHP数组值_Php_Arrays_Combinations - Fatal编程技术网

基于字符串开头组合PHP数组值

基于字符串开头组合PHP数组值,php,arrays,combinations,Php,Arrays,Combinations,我有一个多维PHP数组,如下所示: [14]=> array(2) { [0]=> int(29) [1]=> int(129) } [193]=> array(3) { [0]=> int(6009231) [1]=> int(6324415) [2]=> int(5682922) } 编辑:可以有两个以上的键(这里是14和193)。可以有n个键 我的目

我有一个多维PHP数组,如下所示:

[14]=>
  array(2) {
    [0]=>
    int(29)
    [1]=>
    int(129)
  }

[193]=>
  array(3) {
    [0]=>
    int(6009231)
    [1]=>
    int(6324415)
    [2]=>
    int(5682922)
  }
编辑:可以有两个以上的键(这里是14和193)。可以有n个键

我的目标是在新数组中获取以下字符串:

14:29;193:6009231
14:29;193:6324415
14:29;193:5682922
14:129;193:6009231
14:129;193:6324415
14:129;193:5682922
条件是键、值用
分隔,元素用
分隔
第一个元素应该始终是第一个键(14),然后我们检查第一个键的值。第二个元素始终是第二个键,我们再次检查第二个元素的值。
编辑:键始终按升序排序

我设法以所需格式获得所有可能的组合键:值,如下所示:

$properties_values_combinations = []
foreach ($myarray as $property) {
    foreach ($property as $value) {
        $properties_values_combinations[] = (string)$property.":".(string)$value;
    }
}

但是,如何根据我想要实现的结果组合此数组的元素?

您可以使用
数组\u键
提取数组的键,然后使用这些键迭代每个子数组:

$result = array();
list($k1, $k2) = array_keys($myArray);
foreach ($myArray[$k1] as $v1) {
    foreach ($myArray[$k2] as $v2) {
        $result[] = "$k1:$v1;$k2:$v2";
    }
}
print_r($result);
输出:

Array
(
    [0] => 14:29;193:6009231
    [1] => 14:29;193:6324415
    [2] => 14:29;193:5682922
    [3] => 14:129;193:6009231
    [4] => 14:129;193:6324415
    [5] => 14:129;193:5682922
)

更新

如果可以有超过2个子数组,则需要使用递归来解决该问题。此函数将执行您想要的操作:

function list_values($array) {
    $output = array();
    $k1 = array_keys($array)[0];
    if (count($array) == 1) {
        foreach ($array[$k1] as $v1) {
            $output[] = "$k1:$v1";
        }
    }
    else {
        foreach ($array[$k1] as $v1) {
            foreach (list_values(array_slice($array, 1, null, true)) as $k2v2) {
                $output[] = "$k1:$v1;$k2v2";
            }
        }
    }
    return $output;
}

演示4个入口阵列在。输出太长,无法在此处显示。

您可以使用
array\u keys
提取数组的键,然后使用这些键迭代每个子数组:

$result = array();
list($k1, $k2) = array_keys($myArray);
foreach ($myArray[$k1] as $v1) {
    foreach ($myArray[$k2] as $v2) {
        $result[] = "$k1:$v1;$k2:$v2";
    }
}
print_r($result);
输出:

Array
(
    [0] => 14:29;193:6009231
    [1] => 14:29;193:6324415
    [2] => 14:29;193:5682922
    [3] => 14:129;193:6009231
    [4] => 14:129;193:6324415
    [5] => 14:129;193:5682922
)

更新

如果可以有超过2个子数组,则需要使用递归来解决该问题。此函数将执行您想要的操作:

function list_values($array) {
    $output = array();
    $k1 = array_keys($array)[0];
    if (count($array) == 1) {
        foreach ($array[$k1] as $v1) {
            $output[] = "$k1:$v1";
        }
    }
    else {
        foreach ($array[$k1] as $v1) {
            foreach (list_values(array_slice($array, 1, null, true)) as $k2v2) {
                $output[] = "$k1:$v1;$k2v2";
            }
        }
    }
    return $output;
}

演示4个入口阵列在。输出太长,无法在此处显示。

您的数组将只包含2个子数组?或者可以有多个子阵列?如果是,那么您如何知道必须从哪个索引开始???是的,只有2个子数组。第一级表示属性,第二级表示值(myarray[property][value])对不起,我误解了2子数组的含义。如果你的意思是2是14和193,那么不,可以有n个子数组。您开始使用的索引是最小的。它可以升序排序。您的数组将只包含2个子数组吗?或者可以有多个子阵列?如果是,那么您如何知道必须从哪个索引开始???是的,只有2个子数组。第一级表示属性,第二级表示值(myarray[property][value])对不起,我误解了2子数组的含义。如果你的意思是2是14和193,那么不,可以有n个子数组。您开始使用的索引是最小的。它可以按升序排列。谢谢尼克,看起来很整洁。然而,如果我有第三把钥匙,或者n把钥匙,我该怎么办?@VincentTeyssier在我回答时没有看到那个评论。3个键的输出量是多少?假设第三个键是256:3,我们取一个第四个键,例如44个:56个,那么第一个值输出是14:29;193:6009231;256:3;444:56@VincentTeyssier请参阅我的编辑。它包括一个递归函数,可以处理任意数量的子数组。@VincentTeyssier不用担心,这是一个有趣的问题。我很高兴能帮上忙。谢谢尼克,看起来不错。然而,如果我有第三把钥匙,或者n把钥匙,我该怎么办?@VincentTeyssier在我回答时没有看到那个评论。3个键的输出量是多少?假设第三个键是256:3,我们取一个第四个键,例如44个:56个,那么第一个值输出是14:29;193:6009231;256:3;444:56@VincentTeyssier请参阅我的编辑。它包括一个递归函数,可以处理任意数量的子数组。@VincentTeyssier不用担心,这是一个有趣的问题。我很高兴能帮上忙。