【问题标题】:implode multiple array values内爆多个数组值
【发布时间】:2016-10-22 11:58:54
【问题描述】:

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

根据我目前的研究,所有示例都包括内爆多维数组(使用 array_map)或内爆数组中的所有值使用 implode(',', $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 implode($array[0], '_', $array[2]);
但我发现它不起作用,因为允许使用 2 个参数

【问题讨论】:

  • 模糊的问题。请提及场景和预期模式。
  • 告诉我们您尝试将三个参数用于 2 参数函数只是告诉我们您很困惑,这只会让我们感到困惑。
  • 很不清楚你想在这里实现什么
  • 请完整发布您的初始数组以及您的预期结果。你让每个人都感到困惑,我们只是猜测。请这样做

标签: php arrays implode


【解决方案1】:

在多维数组中使用 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;

【讨论】:

  • 谢谢,您的解决方案有效。如果数组有超过 3 个值并且我需要用相同的模式循环所有这些值,你会怎么做,例如array(array( abc_ghi, def_jkl), array(mno_stu, pqr_vwx, BCD_HIJ)?
  • 好的,给我一些时间,我正在更新这些答案
  • 您好,感谢您提供修改后的代码,但这并不完全有效。它需要第二个数组的第一个和最后一个值,而我需要连接数组的每个第二个值,如下所示:array(array (1_3, 2_4, 5_7, 6_8), array (1_3, 2_4))
  • 数组的长度也可能不一样
  • 嗨,你能用最后一个代码“完全动态,奇偶规则”重新检查吗
【解决方案2】:
<?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,您将获得期望输出的数组,因此您可以将其用于具有多个这样的元素的数组。 :)

【讨论】:

  • 请检查$b好吗?
  • 您好,谢谢您的回答几乎有效;它似乎不起作用。数组到字符串转换错误
【解决方案3】:

您可以使用以下脚本:

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

输出:

abc_ghi

【讨论】:

    【解决方案4】:

    你可以试试:

    $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

    【讨论】:

    • 如果他愿意,他可以将其放入 foreach 循环中,只是提供指导。
    • 检查:- if(isset($array[$i+2])){$output[] = $array[$i] . "_" . $array[$i+2];} 将删除 i+2 issue 以及最后两个奇怪的输出 "bcf_""jhf_"
    【解决方案5】:

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

    请参阅内联 cmets 以获得解释。

    代码:(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',
        ),
      ),
    )
    

    【讨论】:

    • 如果这不是您想要的输出,请给我留言。正如其他人提到的,你的问题不是很清楚。即使您不再为您的问题寻求支持,请考虑改进您的问题,以便此页面可以用作未来读者的资源,如果/当有人提出类似问题时,也可以用作重复链接。
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2022-01-01
    • 2011-07-12
    • 2013-12-15
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多