首页 > 解决方案 > PHP如何加入多维数组并在单个字符串中单独

问题描述

在 var_dump 下面找到:

Array ( [0] => Merk op dat als u verschillende verzekeringsovereenkomsten gaat vergel [1] => ijken, u niet enkel de geraamde kosten en lasten van de overeenkomsten [2] => met elkaar mag vergelijken, maar ook andere elementen in aanmerking m [3] => oet nemen, zoals de reikwijdte van de waarborgen, het bedrag van event [4] => uele franchises of de uitsluitingsclausules. De hierboven opgegeven ) Array ( [0] => ramingen geven een beter zicht op het premiegedeelte dat wordt aangewe [1] => nd voor de dekking van het risico dat door de verzekeringsovereenkomst [2] => wordt gedekt. Het saldo van de premie, na aftrek van de taksen en bij [3] => dragen alsook van de acquisitie- en administratiekosten, bestaat immer [4] => s uit het gedeelte van de premie dat wordt aangewend om de ) Array ( [0] => contractueel vastgelegde prestaties te verrichten en uit de andere kos [1] => ten dan hierboven vermeld (waaronder de samengevoegde en onderling ged [2] => eelde kosten van de schadegevallen en het beheer ervan). Deze ramingen [3] => zijn berekend op grond van de boekhoudkundige gegevens van het laatst [4] => e boekjaar van de verzekeringsonderneming, als goedgekeurd door haar ) algemene vergadering.Array ( [0] => La prime a t adapte en fonction de notre dernier tarif. Vous avez l [1] => e droit de rsilier votre contrat dans les 3 mois qui suivent cette no [2] => tification. La rsiliation se fait par lettre recommande. ) Array ( [0] => Votre attention est attire sur le fait qu'une comparaison entre plusi [1] => eurs contrats d'assurance ne doit pas se limiter comparer l'estimati [2] => on des cots et frais de chaque contrat mais doit galement prendre en [3] => considration d'autres lments, tels que l'tendue des garanties, le [4] => montant des franchises ventuelles ou les clauses d'exclusion. Les ) Array ( [0] => estimations communiques ci-dessus permettent de mieux apprcier la pa [1] => rtie de la prime qui sert couvrir le risque assur par le contrat d' [2] => assurance. Le solde de la prime, aprs dduction des taxes et contribu [3] => tions ainsi que des frais d'acquisition et d'administration, reprsent [4] => e en effet la part de la prime affecte l'excution des prestations ) Array ( [0] => contractuelles ainsi que les frais non mentionns ci-dessus (y inclus [1] => le cot mutualis des sinistres et de leur gestion). Ces estimations s [2] => ont calcules sur la base des donnes comptables du dernier exercice c [3] => omptable de l'entreprise d'assurances telles qu'approuves par son ass [4] => emble gnrale. )

正如你所看到的,这个例子结合了单维和多维数组,我需要把它们放在一个用空格分隔的字符串中。

标签: phparraysmultidimensional-array

解决方案


一个词,递归

function mutliImplode($glue, $pieces = ''){
    if(!is_array($pieces) && is_array($glue)){
    //compatibility with native implode where glue and piecess can be swapped
         list($glue, $pieces) = array($pieces, $glue); //swap their values
    }

    $flat = [];
    foreach($pieces as $item){
        //if it's a sub-array, call this function again with the sub-array (recursion)
        if(is_array($item)) $item = mutliImplode($glue, $item);

        $flat[] = $item;      
    }

    //by building a flat array, we can avoid having to remove extra "glue"
    //if we just concatenated $item = $item.$glue. At the end we would 
    //have an extra $glue that we would have to remove...
    return implode($glue, $flat);
}

$arr = [ 'one', ['two', 'three']];
echo mutliImplode(' ', $arr);

输出

one two three

沙盒

此外,如果没有“胶水”,您可以像原生内爆一样调用它(您可以通过用“碎片”代替“胶水”来调用它,并省略第二个参数)

mutliImplode($arr);

输出

onetwothree

或者你甚至可以交换参数,就像原生内爆一样。$glue虽然它建议这样做$pieces。我只是想把它作为对自己的额外挑战。

   echo mutliImplode($arr, ' ');

输出

 one two three

参考http://php.net/manual/en/function.implode.php

implode — 用字符串连接数组元素

注意:由于历史原因,implode() 可以按任意顺序接受其参数。然而,为了与explode() 保持一致,使用文档化的参数顺序可能不会那么混乱。

这当然假设您输入了一个有效的数组,它也适用于非嵌套数组,尽管比本机实现慢一点。

干杯!


推荐阅读