Я бы предложил использовать head
, а не [
в R.
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple" "chocolate"
Если Вы хотите повторно индексировать то, чтобы начинать обнулить, просто сделайте следующее:
$iZero = array_values($arr);
при необходимости в нем для запуска в одном, затем используйте следующее:
$iOne = array_combine(range(1, count($arr)), array_values($arr));
Вот страницы руководства для используемых функций:
Сортировка просто вид () , переиндексация кажется немного глупой, но если этому было нужно, это сделает это. Хотя не оперативный. Используйте array_walk () , если Вы сделаете это в наборе мест, просто используйте цикл для значения ключа, если это - одноразовая операция.
<?php
function reindex(&$item, $key, &$reindexedarr) {
$reindexedarr[$key+1] = $item;
}
$arr = Array (2 => 'c', 1 => 'b', 0 => 'a');
sort($arr);
$newarr = Array();
array_walk($arr, reindex, &$newarr);
$arr = $newarr;
print_r($arr); // Array ( [1] => a [2] => b [3] => c )
?>
Если нормально делать новый массив, это - это:
$result = array();
foreach ( $array as $key => $val )
$result[ $key+1 ] = $val;
при необходимости в оперативном реверсировании необходимо двигаться в обратном направлении так, Вы не топаете на индексах, в которых Вы нуждаетесь:
for ( $k = count($array) ; $k-- > 0 ; )
$result[ $k+1 ] = $result[ $k ];
unset( $array[0] ); // remove the "zero" element
$tmp = array();
foreach (array_values($array) as $key => $value) {
$tmp[$key+1] = $value;
}
$array = $tmp;
Это сделает то, что Вы хотите:
<?php
$array = array(2 => 'a', 1 => 'b', 0 => 'c');
array_unshift($array, false); // Add to the start of the array
$array = array_values($array); // Re-number
// Remove the first index so we start at 1
$array = array_slice($array, 1, count($array), true);
print_r($array); // Array ( [1] => a [2] => b [3] => c )
?>
Можно хотеть рассмотреть, почему Вы хотите использовать массив на основе 1 вообще. Основанные на нуле массивы (при использовании неассоциативных массивов) являются довольно стандартными, и если бы Вы желаете произвести к UI, большинство обработало бы решение, просто увеличив целое число на вывод к UI.
Думают о consistency— и в Вашем приложении и в коде, Вы работаете with— при размышлении об индексаторах на основе 1 для массивов.
Ну, я хотел бы думать, что для того, что Ваша конечная цель, Вы не должны были бы на самом деле изменять массив, чтобы быть на основе 1 в противоположность на основе 0, но могли вместо этого обработать ее в итеративное время как отправленный Гамбо.
Однако , для ответа на вопрос эта функция должна преобразовать любой массив в РЕДАКТИРОВАНИЕ версии
function convertToOneBased( $arr )
{
return array_combine( range( 1, count( $arr ) ), array_values( $arr ) );
}
, Вот более допускающая повторное использование/гибкая функция, должны Вы требовать его
$arr = array( 'a', 'b', 'c' );
echo '<pre>';
print_r( reIndexArray( $arr ) );
print_r( reIndexArray( $arr, 1 ) );
print_r( reIndexArray( $arr, 2 ) );
print_r( reIndexArray( $arr, 10 ) );
print_r( reIndexArray( $arr, -10 ) );
echo '</pre>';
function reIndexArray( $arr, $startAt=0 )
{
return ( 0 == $startAt )
? array_values( $arr )
: array_combine( range( $startAt, count( $arr ) + ( $startAt - 1 ) ), array_values( $arr ) );
}
Почему переиндексация? Просто добавьте 1 к индексу:
foreach ($array as $key => $val) {
echo $key + 1, '<br>';
}
<час> Редактирование После того, как вопрос был разъяснен: Вы могли использовать array_values
для сброса индекса, запускающегося в 0. Тогда Вы могли использовать алгоритм выше, если Вы просто хотите, чтобы распечатанные элементы запустились в 1.