У меня есть строка, которая будет взорвана для получения массива, и, как известно, ключ выходного массива будет начинаться с 0 в качестве ключа первого элемента, 1 для второго и так далее.
Теперь, как заставить этот массив начать с 1, а не 0?
Это очень просто для типизированного массива, так как мы можем написать его вот так:
array('1'=>'value', 'another value', 'and another one');
НО для массива, который создается «на лету» с помощью взрыва, как это сделать?
Благодарю.
$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_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 для …
Нейт почти имел это, но нуждался в временной переменной:
$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
EDIT: используйте это вместо этого.
$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);