【问题标题】:Processing a string in PHP在 PHP 中处理字符串
【发布时间】:2009-04-09 18:05:06
【问题描述】:

我需要一种对 PHP 中的字符串进行排序的方法,该字符串的格式如下所示,但要大得多。

{ 1, 3, 1, 2, }, { 2, 3, 2, 1, }, { 3, 3, 2, 2, }, { 1, 2, 3, 1, },

我需要它做的是将括号中的每组数字转换为一个数组。所以在这种情况下会有四个数组,每个数组中有四个值。

第一个数组如下所示:

array1[0] == 1
array1[1] == 3
array1[2] == 1
array1[3] == 2

我将如何做到这一点?

【问题讨论】:

  • 数组大小固定 = 4?

标签: php arrays


【解决方案1】:
$inbound = "{ 1, 3, 1, 2, }, { 2, 3, 2, 1, }, { 3, 3, 2, 2, }, { 1, 2, 3, 1, }";
$inbound = trim(preg_replace("/,\\s*}/i", "}", $inbound), " ,");
$inbound = str_replace("{", "[", $inbound);
$inbound = str_replace("}", "]", $inbound);

$array_of_arrays = json_decode('[' . $inbound . ']');

【讨论】:

  • str_replace(array("{", "}"), array("[", "]"), $inbound) 也可以。
  • 回显 $array_of_arrays 什么也没显示,我错过了什么吗?
  • 不,我错过了数字后面的逗号。这导致 json_decode 失败。稍等片刻。
  • 你不能只做 str_replace(", }", "}", $inbound);而不是使用正则表达式?
  • 很抱歉,但是当我使用 print_r ($array_of_arrays);我收到的所有输出都是 Array()
【解决方案2】:

我无法评论 (

编辑:

$inbound = str_replace(array('{', ', }'), array('[', ']'), $inbound);

修复。

【讨论】:

    【解决方案3】:

    我想我会用大括号分开,然后用逗号分开。这将是编写代码的最简单方法(可能无论如何,取决于您的观点),但就复杂性而言不是最有效的。

    最有效的方法是遍历数组,在找到逗号或大括号时执行不同的操作:

     arrayOfArrays = new Array()
     masterIndex = 0
     arrayOfArrays[masterIndex] = new Array()
    
     for char c in string
       if c == '}'
         masterIndex++
         arrayOfArrays[masterIndex] = new Array()
       else if c == ','
         append num to arrayOfArrays[masterIndex]
       else if c is whitespace
         noop
       else
         append c to num
    

    【讨论】:

    • @vartec:看起来伪代码的意思不会太难破译。这就是我通常对其他任何事情的处理方式,尽管 Sean 的想法非常巧妙。
    【解决方案4】:
    $str = "{ 1, 3, 1, 2, }, { 2, 3, 2, 1, }, { 3, 3, 2, 2, }, { 1, 2, 3, 1, },";
    $matches = array();
    $nArrays = preg_match_all('/{(.*)}/U',$str, $matches);
    for($i=1;$i<=$nArrays; $i++) {
      $aArray = array(); 
      $nNums = preg_match_all('/(\d+)/',$matches[$i],$aArray);
      ${'array'.$i} = array();
      for($j=0;$j<=$nNums; $j++) {
        ${'array'.$i}[$j] = $aArray[$j+1];
      }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多