我有一个字符串,它将被分解以获得一个数组,正如我们所知,输出数组键将从 0 作为第一个元素的键开始,1 表示第二个元素,依此类推。
现在如何强制该数组从 1 而不是 0 开始?
对于类型化数组来说非常简单,因为我们可以这样写:
array('1'=>'value', 'another value', 'and another one');
但是对于使用explode动态创建的数组,该怎么做?
谢谢。
$exploded = explode('.', 'a.string.to.explode');
$exploded = array_combine(range(1, count($exploded)), $exploded);
var_dump($exploded);
完毕!
只需使用分隔符在数组头部创建一个虚拟元素,然后将其删除。这应该是完成这项工作的最有效方法:
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);
}
$somearray = explode(",",$somestring);
foreach($somearray as $key=>$value)
{
$otherarray[$key+1] = $value;
}
好吧,它很脏,但这不是php的用途...
Nate 几乎拥有它,但需要一个临时变量:
$someArray = explode(",",$myString);
$tempArray = array();
foreach($someArray as $key=>$value) {
$tempArray[$key+1] = $value;
}
$someArray = $tempArray;
$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);