【问题标题】:How can I use the split string in form of an array in PHP?如何在 PHP 中以数组的形式使用拆分字符串?
【发布时间】:2017-09-26 10:40:02
【问题描述】:

这是我拆分字符串的小程序,所以这是否有效,因为我曾使用HEREDOC 来分隔字符串,现在我想以数组的形式使用它,

<?php
$str = <<<EOD
2
3
1 2 3
4
2 1 3 1
EOD;

所以在这里你可以看到我使用heredoc 来创建一个字符串。基本上我想做的是,我想以数组的方式访问这个字符串,

在字符串中,以2 开头,这是包含两个子数组的数组的大小,即34,在3 中是1 2 3,在4 2 1 3 1,现在我想以数组的形式访问它们,以便我可以做一些算术和。

【问题讨论】:

  • 向我们展示你的尝试。
  • 我想计算这个,示例案例 1。让我们计算示例案例中所有索引 i 的 prefixSum(i) + suffixSum(i)。 prefixSum(1) + suffixSum(1) = 1 + 6 = 7 prefixSum(2) + suffixSum(2) = 3 + 5 = 8 prefixSum(3) + suffixSum(3) = 6 + 3 = 9函数是 7,在索引 1 处获得,所以答案是 1。
  • 示例案例 2. 让我们计算示例案例中所有索引 i 的 prefixSum(i) + suffixSum(i)。 prefixSum(1) + suffixSum(1) = 2 + 7 = 9 prefixSum(2) + suffixSum(2) = 3 + 5 = 8 prefixSum(3) + suffixSum(3) = 6 + 4 = 10 prefixSum(4) + suffixSum(4) = 7 + 1 = 8 函数的最小值是 8,这是针对索引 2 和 4 实现的。这两个索引 2、4 的最小值是索引 2。因此,答案将是 2。
  • 请编辑问题以包含所有信息。
  • 你看到我的回答了吗?需要改动吗?

标签: php arrays string


【解决方案1】:

试试这个代码。

我在代码中添加了一些 cmets。
编辑支持一种大小的子数组。

$str = <<<EOD
4
3
1 2 3
4
2 1 3 1
2
2 1
1
2
EOD;

$arr = explode(PHP_EOL, $str); // explode on new line

$item = 0;
$header =0;
foreach($arr as $key => $val){
    if($key == 0){
        $items = $val; // how large is the final array supposed to be?
        $res = range(0,$val-1); // create an array with final size with dummy values
    }elseif ($key % 2 != 0) { //not even number meaning it is "header" for subarray
        if($header == 0) echo "Header: OK\n"; // is the PREVIOUS subarray correct size? error checking
        $header = $val; // save value of subarray size

    }else{
        $res[$item] = explode(" ", $val); // explode the value and place it in result array $item key
        $header = $header - count($res[$item]); // subtract the number of items in subarray from $header, this is error checking
        $item++; // add to counter

    }
}

if($item == $items) echo "Complete array: OK\n"; // error checking make sure final array is correct size


var_dump($res);

你可以在这里测试它:https://3v4l.org/kENmb

【讨论】:

  • 是的,当然...接受
【解决方案2】:

所以我终于得到了答案。检查出来...!!!

<?php
$str=<<<EOD
2
3
1 2 3
4
2 1 3 1
EOD;

    $input = trim($str);
    $raw_data=explode(PHP_EOL,$input);
    $T = (int)$raw_data[0]*2;
    $test_cases=[];

    for($i=1;$i<=$T;$i+=2) {
        $local=[];
        $local[]=(int)$raw_data[$i];
        $local[]=explode(' ',$raw_data[$i+1]);
        $test_cases[]=$local;
    }

    function prefix($n,$index) {
      $total=0;
      for($i=0;$i<$index;$i++) {
        $total += $n[$i];
      }
      return $total;
    }

    function suffix($p,$index) {
       $total=0;
       for($i=(count($p)-1);$i>=$index-1;$i--) {
          $total += $p[$i];
       }
       return $total;
    }

    for($i=0;$i<count($test_cases);$i++) {
    $temp = NULL;
    $temp_index = NULL;
    for($j=1;$j<=$test_cases[$i][0];$j++) {
    $sum = prefix($test_cases[$i][1], $j) + suffix($test_cases[$i][1], $j);

    if($temp) {
        if($temp > $sum) {
            $temp = $sum;
            $temp_index = $j;
        }
    } else {
        $temp_index = $j;
        $temp = $sum;
    }

 }
   var_dump($temp,$temp_index);
}

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多