【问题标题】:Is this possible for combining of two arrays, in PHP?这可以在 PHP 中组合两个数组吗?
【发布时间】:2016-11-25 03:09:22
【问题描述】:

我有两个数组signatoriesdesignations。 Designations 数组具有分隔符 "|",表示 1 个签署者有 2 个指定。如果元素在分隔符中有 2 个值,在其他数组中有 1 个值,我想输出。它将产生另一个副本或克隆。像这样。

$signatories = array('Allan','Robert','Maria');

$designations = array('CEO','CEO|COO','MANAGER|OIC|COO');

我的预期输出:

Allan - CEO

Robert - CEO
Robert - COO

Maria - MANAGER
Maria - OIC
Maria- COO

【问题讨论】:

  • 如果您可以控制源数据,更改它是明智的
  • 我想指出的是,虽然在单个循环中执行它是一个很酷的技巧,但您现在无法进行任何类型的验证或更改,并且还会使您的代码更加简洁很难跟上。维护代码的成本通常比在现实生活中从未真正发挥作用的微小性能提升更昂贵。

标签: php arrays


【解决方案1】:

你需要两个循环,并且可以使用相同的索引。

$signatories = array('Allan|Joshua|Ronald', 'Robert|Mellisa', 'Maria');
$designations = array('CEO','CEO|COO','MANAGER|OIC|COO');

$cs = count($signatories);
for ($i=0; $i<$cs; $i++) {
  $desigs = explode('|', $designations[$i]);
  $signas = explode('|', $signatories[$i]);
  foreach ($desigs as &$desig) {
    foreach ($signas as &$signa) {
      echo $signa.' - '.$desig.'<br>';
    }
  }
}

【讨论】:

  • foreach 和 for,为什么有 2 个不同的循环?永远不要将 count() 作为 for 循环中的第二个参数,而是在每个循环中运行它
  • @dagon 我避免使用没有嵌入变量的双引号来实现这种性能优势。我会记住你放在那里的东西,谢谢。
  • @WEBjuju 嗨,先生,我喜欢这个输出,我有这个问题的第二部分.. stackoverflow.com/questions/40799723/… 你能帮我吗,如何执行这个?谢谢
  • @dafnycruz 我已经为另一个爆炸动作更新了它,它解释了 dagon 关于为什么我们让代码易于编辑的答案
  • 两个foreach循环中&amp;写回的目的是什么?
【解决方案2】:

使用 foreach 循环和explode() 函数,您可以将两个数组合并到一个数组中。

    $signatories = array('Allan','Robert','Maria');

    $designations = array('CEO','CEO|COO','MANAGER|OIC|COO');

    $combinedArray = array();
    foreach($signatories as $key => $value){
        $combinedArray[] = array('name' => $value, 'designations' => explode("|",$designations[$key]));
    }
    print_r($combinedArray);die;

$combinedArray 数组具有名称和指定数组。

这个数组的输出 -

    Array
(
    [0] => Array
        (
            [name] => Allan
            [designations] => Array
                (
                    [0] => CEO
                )

        )

    [1] => Array
        (
            [name] => Robert
            [designations] => Array
                (
                    [0] => CEO
                    [1] => COO
                )

        )

    [2] => Array
        (
            [name] => Maria
            [designations] => Array
                (
                    [0] => MANAGER
                    [1] => OIC
                    [2] => COO
                )

        )

)

【讨论】:

  • 您可以使用 array_combine 函数,然后通过管道符号分解元素。
  • 是的,我们可以使用 array_combine 但至少需要一个循环来加入两个数组。这就是我使用循环的原因。
【解决方案3】:

有点乱,但是,有一个循环。

<?php

$signatories = array('Allan','Robert','Maria');
$designations = array('CEO','CEO|COO','MANAGER|OIC|COO');

$i = 0;
foreach($designations as $designation) {

    $newArr = explode('|',$designation);
    echo $signatories[$i].' - '.implode('<br>'.$signatories[$i].' - ',$newArr).'<br><br>';

$i++;
}

【讨论】:

    【解决方案4】:

    另一种方式,

    $signatories = array('Allan','Robert','Maria');
    $designations = array('CEO','CEO|COO','MANAGER|OIC|COO');
    
    
    foreach($signatories as $key=>$val)
    {  
       $exp = explode('|',$designations[$key]);
        foreach($exp as $dsg)
        {
            echo $val.' - '.$dsg;
            echo "<br>";
        }
        echo "<br>";
    }
    

    你的输出将是,

    Allan - CEO
    
    Robert - CEO
    Robert - COO
    
    Maria - MANAGER
    Maria - OIC
    Maria - COO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多