0

使用php的explode和下面的代码

$data="test_1, test_2, test_3";
$temp= explode(",",$data);

我得到一个这样的数组

array('0'=>'test_1', '1'=>'test_2', 2='test_3')

爆炸后我想要什么

array('1'=>'test_1', '2'=>'test_2', 3='test_3')
4

6 回答 6

2

你可以这样:

$temp = array_combine(range(1, count($temp)), array_values($temp));

用于array_combine()使用现有值(使用array_values())创建数组并range()创建一个从 1 到数组大小的新范围

这里的工作示例

于 2012-07-25T13:25:57.620 回答
1

数组索引从 0 开始。如果你真的想让数组从 1 开始,你可以分解它,然后将它复制到另一个数组,索引定义为从 1 开始 - 但是为什么呢?

于 2012-07-25T13:23:21.160 回答
0

你不能直接这样做,但这会做你所追求的:

$temp=explode(',',',' . $data);
unset($temp[0]);
var_dump($temp);
array(3) {
  [1]=>
  string(6) "test_1"
  [2]=>
  string(7) " test_2"
  [3]=>
  string(7) " test_3"
}
于 2012-07-25T13:34:00.110 回答
0

你可以使用这个可能(未经测试)

$newArray=array_unshift($temp,' ');
unset($newArray[0]);
于 2012-07-25T13:25:06.750 回答
0

使用爆炸是不可能的。

for($i = count($temp) - 1; $i >= 0; $i--) 
    $temp[$i + 1] = $temp[$i];
unset($temp[0]);
于 2012-07-25T13:25:45.447 回答
0

Lloyd Watkin 的回答使最少的函数调用达到预期的结果。这无疑是对 ManseUK 方法的一个更好的回答,ManseUK 的方法在字符串被分解后在其单行中使用四个函数。

由于这个问题已经快5年了,老了,如果现在有人敢插话,应该有一些有价值的东西......

我有两件事要解决:

  1. OP 和 Lloyd Watkins 都未能根据示例字符串为他们的 explode 方法分配正确的分隔符。分隔符应该是一个逗号,后跟一个空格。

    样本输入:

    $data="test_1, test_2, test_3";
    
  2. 没有人提供与 Lloyd 的两功能方法相匹配的单线解决方案。这是:(演示

    $temp=array_slice(explode(", ",", $data"),1,null,true);
    

    这个双函数单行在$data字符串前面加上一个逗号,然后是一个空格,然后再分解它。然后array_slice忽略第一个空元素,并从第二个元素 ( 1) 返回到末尾 ( null),同时保留键 ( true)。

    根据需要输出:

    array(
        1 => 'test_1',
        2 => 'test_2',
        3 => 'test_3',
    )
    
于 2017-04-02T12:25:40.663 回答