使用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')
你可以这样:
$temp = array_combine(range(1, count($temp)), array_values($temp));
用于array_combine()
使用现有值(使用array_values()
)创建数组并range()
创建一个从 1 到数组大小的新范围
数组索引从 0 开始。如果你真的想让数组从 1 开始,你可以分解它,然后将它复制到另一个数组,索引定义为从 1 开始 - 但是为什么呢?
你不能直接这样做,但这会做你所追求的:
$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"
}
你可以使用这个可能(未经测试)
$newArray=array_unshift($temp,' ');
unset($newArray[0]);
使用爆炸是不可能的。
for($i = count($temp) - 1; $i >= 0; $i--)
$temp[$i + 1] = $temp[$i];
unset($temp[0]);
Lloyd Watkin 的回答使最少的函数调用达到预期的结果。这无疑是对 ManseUK 方法的一个更好的回答,ManseUK 的方法在字符串被分解后在其单行中使用四个函数。
由于这个问题已经快5年了,老了,如果现在有人敢插话,应该有一些有价值的东西......
我有两件事要解决:
OP 和 Lloyd Watkins 都未能根据示例字符串为他们的 explode 方法分配正确的分隔符。分隔符应该是一个逗号,后跟一个空格。
样本输入:
$data="test_1, test_2, test_3";
没有人提供与 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',
)