【问题标题】:php explode and force array keys to start from 1 and not 0php 爆炸并强制数组键从 1 而不是 0 开始
【发布时间】:2012-10-30 22:29:42
【问题描述】:

我有一个字符串,它将被分解得到一个数组,正如我们所知,输出数组的键将从 0 开始作为第一个元素的键,1 表示第二个元素,依此类推。

现在如何强制该数组从 1 而不是 0 开始?

类型化数组非常简单,我们可以这样写:

array('1'=>'value', 'another value', 'and another one');

但是对于使用explode动态创建的数组,怎么做?

谢谢。

【问题讨论】:

    标签: php arrays explode array-key


    【解决方案1】:
    $exploded = explode('.', 'a.string.to.explode');
    $exploded = array_combine(range(1, count($exploded)), $exploded);
    var_dump($exploded);
    

    完成!

    【讨论】:

    • +1。非常好。 :) 我试图用array_walk() 想出一些东西,但这更好。
    • 谢谢 :) 很高兴能帮上忙。
    • @Claudrian array_combine, range, count:一个简单的任务需要做很多工作;)
    • @Eineki 它简短、明确、轻量级。与 0.00002 秒一样需要 0.02 毫秒。不太破旧:)
    • @Eineki - 我不同意。我相信在 StackOverflow 上提出的大多数 问题都是XY problems,并且通用解决方案对网站的未来观众有更大的长期利益。当然,您可以解决这个问题,但这有什么意义呢?我不想看到你一次性的答案。我想要可以在 my 代码中使用的答案。无需等待另一个愚蠢的重复问题的答案。也就是说......我喜欢你的回答。 :)
    【解决方案2】:

    只需使用分隔符在数组头部创建一个虚拟元素,然后将其删除。这应该是最有效的工作方式:

    function explode_from_1($separator, $string) {
        $x = explode($separator, $separator.$string);
        unset($x[0]);
        return $x;
    }
    

    更通用的方法:

    function explode_from_x($separator, $string, $offset=1) {
        $x = explode($separator, str_repeat($separator, $offset).$string);
        return array_slice($x,$offset,null,true);
    }
    

    【讨论】:

      【解决方案3】:
      $somearray = explode(",",$somestring);
      
      foreach($somearray as $key=>$value)
      {
         $otherarray[$key+1] = $value;
      }
      

      它很脏,但这不是 php 的用途......

      【讨论】:

      • 那行不通。 $somearray 的所有元素都将相同。
      【解决方案4】:

      Nate 几乎拥有它,但需要一个临时变量:

      $someArray = explode(",",$myString);
      $tempArray = array();
      
      foreach($someArray as $key=>$value) {
         $tempArray[$key+1] = $value;
      }
      $someArray = $tempArray;
      

      codepad example

      【讨论】:

        【解决方案5】:
        $array = array('a', 'b', 'c', 'd');
        
        $flip = array_flip($array);
        foreach($flip as &$element) {
            $element++;
        }
        $normal = array_flip($flip);
        print_r($normal);
        

        试试这个,一个相当时髦的解决方案:P

        编辑:改用这个。

        $array = array('a', 'b', 'b', 'd');
        $new_array = array();
        
        $keys = array_keys($array);
        for($i=0; $i<count($array); $i++) {
            $new_array[$i+1] = $array[$i];
        }
        print_r($new_array);
        

        【讨论】:

        • 在您的第一次尝试中,如果您的值中有任何重复数据,array_flip() 在这种情况下会丢失数据。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        相关资源
        最近更新 更多