php的爆炸数组索引

问题描述:

使用PHP的爆炸与下面的代码php的爆炸数组索引

$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一个新的范围,以您的数组的大小,以创建数组

Working example here

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

+0

这是无益的,和更好的资格作为对问题与回答的评论。请考虑删除此答案,因为它只能用作页面膨胀。 Downvoted。 – mickmackusa 2017-04-02 11:41:45

+0

PDO的'bindValue()'参数是1索引的,它可以直接用于设置数组键,以迭代并设置所有bindValue参数和值,而无需额外处理。 – mickmackusa 2017-04-02 12:05:50

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

$newArray=array_unshift($temp,' '); 
unset($newArray[0]); 
+0

这是考虑它的正确方法,但是Lloyd Watkin的功能更少一些,因为他将'$ data'字符串与额外的分隔符相提并论。 – mickmackusa 2017-04-02 11:47:30

它使用爆炸是不可能的。

for($i = count($temp) - 1; $i >= 0; $i--) 
    $temp[$i + 1] = $temp[$i]; 
unset($temp[0]); 
+0

您的领导声明不正确。解决这个问题的一些最好的两步法结合了'explode()'。尽量不要用这种说法来误导SO读者。 – mickmackusa 2017-04-02 11:45:04

你不能直接这样做,但是这样做会做你想要的东西r:

$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" 
} 
+0

请学会正确格式化您的代码 – ManseUK 2012-07-25 13:39:02

+0

快速复制并从终端粘贴 – 2012-07-25 13:43:53

Lloyd Watkin的答案使最少的函数调用达到预期的结果。对于ManseUK的方法来说,它肯定是一个优越的答案,在字符串爆炸后,它的单线程使用四个函数。

由于这个问题是近5年来,老应该有一些有价值的东西来补充,如果有人敢现在帮腔......

我有两件事情来解决:

  1. 的OP和Lloyd Watkins都未能根据样本字符串将正确的分隔符分配给他们的爆炸方法。分隔符应该是后面跟一个空格。

    样品输入:

    $data="test_1, test_2, test_3"; 
    
  2. 没有人提供了劳埃德的双功能的方法相匹配的一个班轮解决方案。这里说的是:(Demo

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

    这两个函数的单行预先考虑$data串用逗号,然后爆炸前的空间。然后array_slice忽略第一个空元素,并从第二个元素(1)返回到结尾(null),同时保留键(true)。根据需要

    输出:

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

@lgt本页其他答案的范围从低效到论证不正确。请考虑将接受的答案转换为我的答案,因为未来的SO读者可能会感到困惑,误导和/或复制/粘贴低效的代码。 – mickmackusa 2017-04-02 12:29:18