【问题标题】:Transforming an array value into a new array without losing any characters将数组值转换为新数组而不丢失任何字符
【发布时间】:2020-03-18 08:09:57
【问题描述】:

我有一个如下所示的数组:

  Array
(
    [basisprijs] => 17,00
    [basisstaffel] => 
    3-10:17;
    10-20:14;
    20-30:12;
    30-40:10;
    40-50:7,50;
    50-60:6,50;
    60-110:6;
    [minimaalformaat] => 10x3
    [maximaalformaat] => 120x5000
    [breedte] => 12
    [hoogte] => 4
    [aantal] => 1
    [Lijmlaag] => Wit(prijsberekening)+($m2*4);
)

我想从[basisstaffel] 创建一个新数组,在每个; 之后开始一个新行,因此所需的最终结果是:

Array
(
    [0] = > 3-10:17;
    [1] = > 10-20:14;
    [2] = > 20-30:12;
    [3] = > 30-40:10;
    [4] = > 40-50:7,50;
    [5] = > 50-60:6,50;
    [6] = > 60-110:6;
)

我该怎么做?在; 上使用explode 会让我失去那部分价值。那么还有其他方法吗?

第一个数组叫做$productarray

【问题讨论】:

标签: php arrays loops explode


【解决方案1】:

您可以只使用 explode 函数,然后执行 foreach 循环并添加 ';'再次符号,像这样:

$newArray=array();
$myArray=array();

$myArray['basisprijs'] = '17,00';
$myArray['basisstaffel'] ='3-10:17;10-20:14;20-30:12;30-40:10;40-50:7,50;50-60:6,50;60-110:6';
$myArray['minimaalformaat'] = '10x3';
$myArray['maximaalformaat'] = '120x5000';
$myArray['breedte'] = '12';
$myArray['hoogte'] = '4';
$myArray['aantal'] = '1';
$myArray['Lijmlaag'] = 'Wit(prijsberekening)+($m2*4)';


$basisstafel=$myArray['basisstaffel'];
$tmp = explode(";", $basisstafel);

 foreach ($tmp as $ind){
     $newArray[]=$ind.';';
 }

echo "<pre>";
  print_r($newArray);
echo "</pre>";

【讨论】:

    【解决方案2】:

    您可以使用preg_splitPREG_SPLIT_DELIM_CAPTURE 标志。 这将返回带有分隔符 = 0、匹配 = 1 的匹配数组

    https://www.php.net/manual/en/function.preg-split.php

    PREG_SPLIT_DELIM_CAPTURE 如果设置了此标志,则将捕获并返回分隔符模式中的括号表达式。

    【讨论】:

    • 不,它不起作用,因为使用 PREG_SPLIT_DELIM_CAPTURE 它将返回 ; 作为单独的数组项。
    【解决方案3】:
    <?php 
    $productArray = [
        'basisprijs' => '17,00',
        'basisstaffel' =>' 
        3-10:17;
        10-20:14;
        20-30:12;
        30-40:10;
        40-50:7,50;
        50-60:6,50;
        60-110:6;',
        'minimaalformaat' => '10x3',
        'maximaalformaat' => '120x5000',
        'breedte' => 12,
        'hoogte' => 4,
        'aantal' => 1,
        'Lijmlaag' => 'Wit(prijsberekening)+($m2*4);'
    ];
    
    $basisstaffel = explode(";", rtrim($productArray['basisstaffel'], ';'));
    
    var_dump($basisstaffel);
    
    Result : array(8) { [0]=> string(14) " 3-10:17" [1]=> string(14) " 10-20:14" [2]=> string(14) " 20-30:12" [3]=> string(14) " 30-40:10" [4]=> string(16) " 40-50:7,50" [5]=> string(16) " 50-60:6,50" [6]=> string(14) " 60-110:6" }
    ?>
    

    【讨论】:

      【解决方案4】:

      看起来你在; 之后有换行符,所以你可以用空格preg_split

      $result = preg_split('/\s+/', $input['basisstaffel']);
      

      为了避免第一个空项目添加PREG_SPLIT_NO_EMPTY标志:

      $result = preg_split('/\s+/', $input['basisstaffel'], -1, PREG_SPLIT_NO_EMPTY);
      

      或者简单地将explode\n\r\n\ 一起使用(你必须知道你拥有的换行符的类型):

      $result = explode("\n", $input['basisstaffel']);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 2012-02-19
        相关资源
        最近更新 更多