是否有可能破坏多个数组值?
根据我迄今为止所研究的内容,所有示例都包括使用implode(',',$ array)来破坏多维数组(使用array_map)或者从数组中插入所有值;
但是,我想知道是否有一种方法可以从数组中内爆数组值:
array([0] (
array [0] ([0] A, [1] B, [2] C, [3] H)
array [1] ([0] A, [1] D, [2] G, [3] H, [4] L)
array [2] ([0] D, [1] Z, [2] J, [3] K, [4] O, [5] X)
)
array([1] (
array [2] ([0] F, [1] Y, [2] W, [3] H, [4] L)
)
array([2] (
array [0] ([0] O, [1] T, [2] C, [4] O, [5] X)
array [1] ([0] U, [1] E, [2] E, [3] D)
))
注意:每个数组中的字符串可以重复几次,并且与结果无关。
得到一个看起来像这样的结果:
$result = array(
array [0] (A_C, B_H, C)
array [1] (A_G, D_H, G_L)
etc...
预期的结果应该允许我测试,如果值不能合并(因为它在数组的末尾),那么显示单个值
作为初学者,我的第一个尝试是尝试内爆implode($array[0], '_', $array[2]);
但我发现它不起作用,因为允许2个参数
你可以试试:
$array = array(0 => "abc", 1 => "zyx", 2 => "bcf", 3 => "jhf");
$output = array();
for ($i = 0; $i < count($array); $i++)
{
$output[] = $array[$i] . "_" . $array[$i+2];
}
var_dump($output);
返回:
array(4) {
[0]=>
string(7) "abc_bcf"
[1]=>
string(7) "zyx_jhf"
[2]=>
string(4) "bcf_" // $i+2 issue
[3]=>
string(4) "jhf_" // $i+2 issue
}
这很糟糕,例如当你在$array
的第二个最后一个条目+没有$i+2
我想我会借此机会为您更新的输入数据提供精确的答案。无论如何,我认为这是一个更简单的方法。
请参阅内联注释以获取解释。
代码:(Demo)
$array=[
[
['A','B','C','H'],
['A','D','G','H','L'],
['D','Z','J','K','O','X']
],
[
2=>['F','Y','W','H','L']
],
[
['O','T','C','O','X'],
['U','E','E','D']
]
];
foreach($array as $k1=>$lev2){
foreach($lev2 as $k2=>$lev3){
foreach($lev3 as $i=>$v){
if(isset($lev3[$i+2])){ // if can be paired with desired value
$result[$k1][$k2][]="{$lev3[$i]}_{$lev3[$i+2]}";
}else{
if($i%2==0){ // if index is even
$result[$k1][$k2][]=$lev3[$i]; // store the single value
}
break; // stop the loop when no future pairing can be done
}
}
}
}
var_export($result);
输出:
array (
0 =>
array (
0 =>
array (
0 => 'A_C',
1 => 'B_H',
2 => 'C',
),
1 =>
array (
0 => 'A_G',
1 => 'D_H',
2 => 'G_L',
),
2 =>
array (
0 => 'D_J',
1 => 'Z_K',
2 => 'J_O',
3 => 'K_X',
4 => 'O',
),
),
1 =>
array (
2 =>
array (
0 => 'F_W',
1 => 'Y_H',
2 => 'W_L',
),
),
2 =>
array (
0 =>
array (
0 => 'O_C',
1 => 'T_O',
2 => 'C_X',
),
1 =>
array (
0 => 'U_E',
1 => 'E_D',
2 => 'E',
),
),
)