解析多行字符串并为提取的子字符串分配默认值零

问题描述 投票:0回答:3

我有一个从字符串中提取公司名称的脚本。我希望将提取的名称转换为 php 变量。例如,第一个结果 (

Real Coffee Sweeden
) 必须转换为
$RealCoffeeSweeden = 0
,以便我稍后可以为其赋值。

$test = '/showname/0406741848                              : Real Coffee Sweeden
/showname/0406741849                              : Healthzone SE
/showname/16133663413                             : FREE
/showname/16133663414                             : RadioPlantes Canada
/showname/16133663417                             : Dealsoftoday.Eu Canada
/showname/16136995593                             : FREE
/showname/16136995594                             : Club White Smile Canada
/showname/16138007442                             : FREE
/showname/16138007547                             : Mybitwave.com Canada
/showname/16465596150                             : BABY
/showname/16465696956                             : FREE
/showname/16465696957                             : FREE
/showname/16467419944                             : Mybitwave.com UK
/showname/16469181975                             : FREE
/showname/21501350                                : SecureSurf.EU NO
/showname/21501351                                : FileCloud365 Norwegian
/showname/21501352                                : FREE
/showname/21501353                                : RadioPlantes Norwegian
';
        
$myRows = explode("\n", $test);
foreach ($myRows as $key => $value) {
    $pieces = explode(":", $value);
    $result[] = $pieces[1];
}
    
foreach ($result as $res) {
    $res // covert to php variable
    //example: $RealCoffeeSweeden = 0;
}
php default-value text-extraction text-parsing
3个回答
2
投票

你可以试试这个方法

  $my_array = explode("\n", $test);
  foreach($my_array as $key => $value {
     $my_string = explode(':', $value)
      ${str_replace(' ','', $my_string[1])} = $my_string;
      echo $$my_string; 
  }

1
投票

您应该为此使用数组。但如果你想按照你写的方式来做,你可以简单地做这样的事情:

foreach( $myRows as $key => $value) {
    $pieces = explode(":", $value);

    $res = str_replace(' ', '', $pieces[1]); // replace whitespaces for valid names
    $$res = 0; // note the double dollar signs
}

如果你想使用数组,请执行以下操作:

$result = [];
foreach( $myRows as $key => $value) {
    $pieces = explode(":", $value);

    $key = str_replace(' ', '', $pieces[1]);
    $result[$key] = 0;
}

根据您的评论,将 foreach 循环中的倒数第二行更改为以下内容:

$res = str_replace(' ', '', $res) . '_f';

0
投票

声明可变变量实际上总是一种不好的做法。 该技术有效地避免了声明数组的非常明显的好处。

这是一个脚本,用于解析分隔的数据行,并生成具有 0 个值的空间清理键的关联数组。

如果你不打算使用

$path
,那么你可以使用
%*[^:]
省略前导子串的捕获,然后不要添加
$path
作为
sscanf()
的参数。

代码:(演示

$result = [];
foreach (explode("\n", str_replace(' ', '', $test)) as $line) {
    if (sscanf($line, '%[^:]:%[^\n]', $path, $name)) {
        $result[$name] = 0;
    }
}
var_export($result);

输出:

array (
  'RealCoffeeSweede' => 0,
  'Healthzo' => 0,
  'FREE' => 0,
  'RadioPla' => 0,
  'Dealsoftoday.EuCa' => 0,
  'ClubWhiteSmileCa' => 0,
  'Mybitwave.comCa' => 0,
  'BABY' => 0,
  'Mybitwave.comUK' => 0,
  'SecureSurf.EUNO' => 0,
  'FileCloud365Norwegia' => 0,
)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.