2012-10-30 40 views
1

我有一个字符串,将爆炸得到一个数组,并且正如我们所知,输出数组键将从0开始作为第一个元素的键, 1为第二等。php爆炸和强制数组键从1开始,而不是0

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

它是一个类型数组很简单,因为我们可以写这样的:

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

但对于正在使用爆炸动态创建一个数组,该怎么办呢?

谢谢。

回答

17
$exploded = explode('.', 'a.string.to.explode'); 
$exploded = array_combine(range(1, count($exploded)), $exploded); 
var_dump($exploded); 

完成!

+2

这里最好的解决方案。我学到了新东西! – SomeKittens

+2

** + 1 **。非常好。 :)我想用'array_walk()'来想出一些东西,但这样更好。 – ghoti

+1

谢谢:)很高兴有帮助。 – CodeAngry

1
$somearray = explode(",",$somestring); 

foreach($somearray as $key=>$value) 
{ 
    $otherarray[$key+1] = $value; 
} 

以及其脏,但不是什么PHP是...

+2

这是行不通的。 '$ somearray'的所有元素都是一样的。 – SomeKittens

1

内特几乎拥有了,而是需要一个临时变量:

$someArray = explode(",",$myString); 
$tempArray = array(); 

foreach($someArray as $key=>$value) { 
    $tempArray[$key+1] = $value; 
} 
$someArray = $tempArray; 

codepad example

+1

在你之前有编辑;) –

1
$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); 
+0

在您的第一次尝试中,如果您的值中有任何重复的数据,'array_flip()'将在这种情况下丢失数据。 – ghoti

+0

是的,这就是为什么我编辑它,感觉有点愚蠢哈哈 – Flosculus

3

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

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); 
}