内爆多个数组值

时间:2016-06-21 04:59:56

标签: php arrays implode

是否可以内爆多个数组值?

根据我迄今为止所研究的内容,所有示例都包括使用implode(',',$ array)来破坏多维数组(使用array_map)或使用implde(',',$ array)对数组中的所有值进行内爆;

但是,我想知道是否有一种方法可以从数组中删除数组值:

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个参数

5 个答案:

答案 0 :(得分:4)

在多维数组中使用implode的一些例子

$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
    $impArray = array($val[0], $val[2]);
    echo implode('_', $impArray);
}


-- -- -- -- -- -Dynamic implode with array first and last value-- -- -- -- -

$sampleArray = array(array('abc', 'def', 'hij'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
    $count = count($val);
    if ($count > 1) {
        $first = reset($val);
        $last = end($val);
        $impArray = array($first, $last);
    } else {
        $first = reset($val);
        $impArray = array($first);
    }

    echo implode('_', $impArray);
}

-- -- -- -- -- -- -- -- -- -- -- -Fully Dynamic with odd, even rules-- -- -- -- --

$finalArray = array();
$sampleArray = array(array('abc', 'def', 'hij', 'dsfd', 'fff'), array('mno', 'xxy', 'kkl'));
foreach($sampleArray as $key => $val) {
    $oddEvenArr = make_array_odd_even($val);
    if (!empty($oddEvenArr['odd']) || !empty($oddEvenArr['even'])) {
        $findMaxSize = 0;
        $oddSize = count($oddEvenArr['odd']);
        $evenSize = count($oddEvenArr['even']);
        if ($oddSize > $evenSize) {
            $findMaxSize = $oddSize;
        } else {
            $findMaxSize = $evenSize;
        }
        for ($i = 0; $i < $findMaxSize; $i++) {
            if (array_key_exists($i, $oddEvenArr['even'])) {
                $finalArray[$key][] = implode('_', $oddEvenArr['even'][$i]);
            }
            if (array_key_exists($i, $oddEvenArr['odd'])) {
                $finalArray[$key][] = implode('_', $oddEvenArr['odd'][$i]);
            }
        }
    }
}

function make_array_odd_even($temp) {
    $odd = array();
    $even = array();
    foreach($temp as $k => $v) {
        if ($k % 2 == 0) {
            $even[] = $v;
        } else {
            $odd[] = $v;
        }
    }
    $oddChunk = array_chunk($odd, 2);
    $evenChunk = array_chunk($even, 2);
    return array('odd' => $oddChunk, 'even' => $evenChunk);
}
echo "<pre>";
print_r($finalArray);
die;

答案 1 :(得分:1)

<?php
$a = array('abc','def','ghi');
$b[0]=$a;

foreach($b as $key=>$val){ 
    array_splice($val, 1, 1);
    $val=implode('_', $val);
    $output[$key]= $val;
    echo $val;
}
var_dump($output);
?>

请你试试这个吗? 使用$Output,您将得到欲望输出数组,因此您可以将它用于具有多个这样的元素的数组。 :)

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用以下脚本:

$result = $array[0][0].'_'. $array[0][2];
echo $result;

输出:

abc_ghi

答案 4 :(得分: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',
    ),
  ),
)