Как Вы повторно индексируете массив в PHP?

Я бы предложил использовать head, а не [ в R.

word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple"     "chocolate"
137
задан meleyal 26 February 2009 в 15:57
поделиться

8 ответов

Если Вы хотите повторно индексировать то, чтобы начинать обнулить, просто сделайте следующее:

$iZero = array_values($arr);

при необходимости в нем для запуска в одном, затем используйте следующее:

$iOne = array_combine(range(1, count($arr)), array_values($arr));

Вот страницы руководства для используемых функций:

403
ответ дан 23 November 2019 в 23:16
поделиться

Сортировка просто вид () , переиндексация кажется немного глупой, но если этому было нужно, это сделает это. Хотя не оперативный. Используйте 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 )

?>
1
ответ дан 23 November 2019 в 23:16
поделиться

Если нормально делать новый массив, это - это:

$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
-10
ответ дан 23 November 2019 в 23:16
поделиться
$tmp = array();
foreach (array_values($array) as $key => $value) {
    $tmp[$key+1] = $value;
}
$array = $tmp;
3
ответ дан 23 November 2019 в 23:16
поделиться

Это сделает то, что Вы хотите:

<?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 ) 

?>
5
ответ дан 23 November 2019 в 23:16
поделиться

Можно хотеть рассмотреть, почему Вы хотите использовать массив на основе 1 вообще. Основанные на нуле массивы (при использовании неассоциативных массивов) являются довольно стандартными, и если бы Вы желаете произвести к UI, большинство обработало бы решение, просто увеличив целое число на вывод к UI.

Думают о consistency— и в Вашем приложении и в коде, Вы работаете with— при размышлении об индексаторах на основе 1 для массивов.

5
ответ дан 23 November 2019 в 23:16
поделиться

Ну, я хотел бы думать, что для того, что Ваша конечная цель, Вы не должны были бы на самом деле изменять массив, чтобы быть на основе 1 в противоположность на основе 0, но могли вместо этого обработать ее в итеративное время как отправленный Гамбо.

Однако , для ответа на вопрос эта функция должна преобразовать любой массив в РЕДАКТИРОВАНИЕ версии

function convertToOneBased( $arr )
{
    return array_combine( range( 1, count( $arr ) ), array_values( $arr ) );
}

на основе 1

, Вот более допускающая повторное использование/гибкая функция, должны Вы требовать его

$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 ) );
}
6
ответ дан 23 November 2019 в 23:16
поделиться

Почему переиндексация? Просто добавьте 1 к индексу:

foreach ($array as $key => $val) {
    echo $key + 1, '<br>';
}
<час>

Редактирование После того, как вопрос был разъяснен: Вы могли использовать array_values для сброса индекса, запускающегося в 0. Тогда Вы могли использовать алгоритм выше, если Вы просто хотите, чтобы распечатанные элементы запустились в 1.

9
ответ дан 23 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: