内爆多个数组值

问题描述 投票:2回答:5

是否有可能破坏多个数组值?

根据我迄今为止所研究的内容,所有示例都包括使用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)
))

注意:每个数组中的字符串可以重复几次,并且与结果无关。

Desired Outcome

得到一个看起来像这样的结果:

$result = array(
          array [0] (A_C, B_H, C)
          array [1] (A_G, D_H, G_L)
          etc...

预期的结果应该允许我测试,如果值不能合并(因为它在数组的末尾),那么显示单个值

作为初学者,我的第一个尝试是尝试内爆implode($array[0], '_', $array[2]); 但我发现它不起作用,因为允许2个参数

php arrays implode
5个回答
0
投票

你可以试试:

$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


0
投票

我想我会借此机会为您更新的输入数据提供精确的答案。无论如何,我认为这是一个更简单的方法。

请参阅内联注释以获取解释。

代码:(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',
    ),
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.