【问题标题】:creating dynamic array in php在php中创建动态数组
【发布时间】:2012-05-27 16:25:17
【问题描述】:

我在文本文件中有以下记录,需要从文本文件中提取该记录并将它们视为单独的数组变量

r1=(1,2,3)|r2=(4,5,6)|r3=(1,2,3,4,5,7)|rn=(9,6,7,8)用竖线(|)隔开

我需要将其表示为数组单独使用,如下所示

$r1= Array
(
[0] => 1
[1] => 2
[2] => 3
)

$r2=Array
(
[0] => 4
[1] => 5
[2] => 6
)

我不知道怎么做,用php可以吗?

【问题讨论】:

    标签: php arrays variables dynamic


    【解决方案1】:
    $data = "r1=(1,2,3)|r2=(4,5,6)|r3=(1,2,3,4,5,7)|rn=(9,6,7,8)";
    
    $arr = explode("|", $data);
    
    $finArray = array();
    
    foreach($arr as $key=>$value)
    {
        $single = explode('(', $value);
        $finArray[] = explode(',', str_replace(')', '', $single[1]));
    }
    
    print_r($finArray);
    

    【讨论】:

      【解决方案2】:

      你可以使用评估

      //Assuming  you can pull the content from text file using fread
      
      $temp = "r1=(1,2,3)|r2=(4,5,6)";
      $temp=str_replace("=","=array",$temp);
      $split=explode("|",$temp);
      echo "<pre>";
      foreach($split as $k=>$v){
            $v="$".$v.";";
            //Evaluate a string as PHP code .i.e You will get r1,r2 as a variable now which is array
            eval($v);
      }
      
      print_r($r1);
      print_r($r2);
      

      【讨论】:

      • 太棒了!现在我可以将所有这些 r1,r2,r3 访问为 $r1,$r2,$r3。谢谢
      • 按照杰克的逻辑更好
      【解决方案3】:

      此代码将帮助您:--

        <?php
          $file = "/tmp/file1.txt"; // this is your file path
          $f = fopen($file, "r");
          while ( $line = fgets($f, 1000) ) {
          print $line;
      
          $a=explode('|',$line);
          print_r($a);  // I have explode based on | for you...
      
      foreach($a as $key=>$value)
      {
          print_r($value);
      }
      

      fclose($file); } ?>

      ""或""

      $a="r1=(1,2,3)|r2=(4,5,6)|r3=(1,2,3,4,5,7)|rn=(9,6,7,8)";
      
      $a=explode('|',$a);
      print_r($a);
      

      【讨论】:

      • @timus2001 我只是给出粗略的想法如何做到这一点.. 不做完整的代码.. 理解..
      • (s)他需要 $r1,$r2,$rn 作为单独的数组:)
      • hmm 逻辑是我们需要将数组的每个元素更改为一个单独的数组,请检查 php 中的 Eval 函数
      • 感谢您的努力,先生,虽然这不是我所需要的,timus2001 是 100% 正确的
      【解决方案4】:

      可以这样做:

      $string="r1=(1,2,3)|r2=(4,5,6)|r3=(1,2,3,4,5,7)|rn=(9,6,7,8)";
      $string=str_repla("r1=","",$string);
      $yourArray=explode('|', $string);
      

      【讨论】:

        【解决方案5】:

        只是一个简单的正则表达式来分解字符串,然后对每个组进行分解:

        if (preg_match_all('#(\w+)=\(([\d,]*)\)#', $s, $matches)) {
            foreach ($matches[2] as $i => $groups) {
                $group_name = $matches[1][$i];
                $$group_name = array_map('intval', explode(',', $groups));
            }
        }
        
        print_r($r1);
        print_r($r3);
        print_r($rn);
        

        【讨论】:

        • 好一个,可以编辑它以使那些 r1,r2 和 r3 成为单独的变量,我只是好奇
        • @timus2001 我在答案中添加了第二部分,该部分也提取了组名。你是这个意思吗?
        • 仍然没有:),(s)他需要所有数组作为单独的变量,如 $r1,$r2.. 需要小 eval ......我得到了解决方案,但如果在你的代码中添加了一些行它更通用
        • 它真的很棒,脱帽逻辑:)
        • 谢谢您,先生,它成功了。但是作为一个初学者,我发现正则表达式很难
        【解决方案6】:
            <?php
        $file = "file.txt";
        $f = fopen($file, "r");
        while ( $line = fgets($f, 1000) ) {
        $str = $line;
        }
        $str1 = explode("|",$str);
        foreach($str1 as $temp) {
            $str2 = explode("=",$temp);
            $data[$str2[0]] = explode(",",trim($str2[1],"()"));
        }
        echo '<pre>';
        print_r($data);
        echo '</pre>';
        ?>
        

        这将完成你的工作。

        【讨论】:

          猜你喜欢
          • 2020-12-05
          • 2020-06-17
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多