在不丢失任何字符的情况下将数组值转换为新数组

Transforming an array value into a new array without losing any characters

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

  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

您可以只使用 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>";

您可以使用 preg_split 并使用 PREG_SPLIT_DELIM_CAPTURE 标志。 这将 return 匹配分隔符 = 0 的数组,匹配 = 1

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

PREG_SPLIT_DELIM_CAPTURE 如果设置了这个标志,分隔符模式中的括号表达式将被捕获并 returned。

<?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" }
?>

看起来你在 ; 之后有换行符,所以你可以 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']);