1부터 시작하는 인덱스를 사용하여 PHP에서 어레이를 다시 인덱싱하려면 어떻게 해야 합니까?
다음의 어레이가 있습니다.키를 반전시키기 위해서 인덱스를 다시 붙이고 싶습니다(이상적으로는 1부터 시작합니다).
현재 어레이(편집: 실제 어레이는 다음과 같습니다):
Array (
[2] => Object
(
[title] => Section
[linked] => 1
)
[1] => Object
(
[title] => Sub-Section
[linked] => 1
)
[0] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
어떻게 해야 하는가?
Array (
[1] => Object
(
[title] => Section
[linked] => 1
)
[2] => Object
(
[title] => Sub-Section
[linked] => 1
)
[3] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
0부터 시작하는 인덱스를 다시 작성하려면 다음 절차를 수행합니다.
$iZero = array_values($arr);
1부터 시작해야 할 경우 다음을 사용합니다.
$iOne = array_combine(range(1, count($arr)), array_values($arr));
다음은 사용된 기능에 대한 설명서 페이지입니다.
왜 재인덱스화합니까?인덱스에 1만 더하면 됩니다.
foreach ($array as $key => $val) {
echo $key + 1, '<br>';
}
질문이 명확해진 후 편집:를 사용할 수 있습니다.array_values
를 0.그런 다음 인쇄 요소를 1부터 시작하려는 경우 위의 알고리즘을 사용할 수 있습니다.
1 기반 어레이를 사용하는 이유를 고려해 볼 수 있습니다.제로 베이스 어레이(비관련 어레이를 사용하는 경우)는 표준 사양입니다.UI로 출력하고 싶은 경우 UI로 출력할 때 정수만 늘리는 방법으로 솔루션을 처리합니다.
어레이의 1 베이스 인덱서를 생각할 때는, 애플리케이션이나 코드의 양쪽 모두에서 일관성을 고려해 주세요.
이렇게 하면 원하는 작업을 수행할 수 있습니다.
<?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 )
?>
음, 최종 목표가 무엇이든 간에 실제로 어레이를 0 베이스가 아닌 1 베이스로 변경할 필요는 없지만 Gumbo가 게시한 것처럼 반복적인 시간에 처리할 수 있다고 생각합니다.
단, 이 함수는 모든 어레이를 1 기반 버전으로 변환해야 합니다.
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 ) );
}
해결책: 보다 a a a a a a:
$list = array_combine(range(1, count($list)), array_values($list));
새 어레이가 다음과 같이 인덱스 1로 시작되도록 어레이를 다시 인덱싱할 수 있습니다.
$arr = array(
'2' => 'red',
'1' => 'green',
'0' => 'blue',
);
$arr1 = array_values($arr); // Reindex the array starting from 0.
array_unshift($arr1, ''); // Prepend a dummy element to the start of the array.
unset($arr1[0]); // Kill the dummy element.
print_r($arr);
print_r($arr1);
위의 출력은 다음과 같습니다.
Array
(
[2] => red
[1] => green
[0] => blue
)
Array
(
[1] => red
[2] => green
[3] => blue
)
내가 생각할 수 있는 가장 빠른 방법은
array_unshift($arr, null);
unset($arr[0]);
print_r($arr);
어레이를 재인덱스화(제로에서 시작)하고 싶을 뿐이고 PHP +7.3을 사용하고 있는 경우는, 이 방법으로 실행할 수 있습니다.
array_unshift($arr);
는 어요를 믿는다.array_unshift
보다 array_values
전자는 배열의 복사본을 생성하지 않기 때문입니다.
체인글로그
버전 | 묘사 |
---|---|
7.3.0 | 이 함수는 이제 하나의 매개 변수만으로 호출할 수 있습니다.이전에는 적어도 2개의 파라미터가 필요했습니다. |
-- https://www.php.net/manual/en/function.array-unshift.php#refsect1-function.array-unshift-changelog
$tmp = array();
foreach (array_values($array) as $key => $value) {
$tmp[$key+1] = $value;
}
$array = $tmp;
이 모든 게array_combine()
응답은 모두 같은 「복사」(불필요한 콜)를 카피하고 있습니다.array_values()
).
array_combine()
는 수신한 양쪽 파라미터의 키를 무시합니다.
코드: (데모)
$array = [
2 => (object)['title' => 'Section', 'linked' => 1],
1 => (object)['title' => 'Sub-Section', 'linked' => 1],
0 => (object)['title' => 'Sub-Sub-Section', 'linked' => null]
];
var_export(array_combine(range(1, count($array)), $array));
출력:
array (
1 =>
(object) array(
'title' => 'Section',
'linked' => 1,
),
2 =>
(object) array(
'title' => 'Sub-Section',
'linked' => 1,
),
3 =>
(object) array(
'title' => 'Sub-Sub-Section',
'linked' => NULL,
),
)
어레이의 순서를 변경할 필요가 없는 경우는, 다음의 조작을 실시합니다.
$array = array_reverse( $array );
다시 한 번 호출하여 동일한 순서로 되돌립니다.
$array = array_reverse( $array );
array_reverse()
재인덱스화됩니다.이거 옛날에 다른 사람이 보여줬어.그래서 내가 그걸 생각해낸 걸 믿을 수 없어.하지만 그것은 매우 간단하고 빠르다.
그 결과 0부터 시작하는 인덱스 키를 가진 어레이가 생성됩니다.https://3v4l.org/iQgVh
array (
0 =>
(object) array(
'title' => 'Section',
'linked' => 1,
),
1 =>
(object) array(
'title' => 'Sub-Section',
'linked' => 1,
),
2 =>
(object) array(
'title' => 'Sub-Sub-Section',
'linked' => NULL,
),
)
여기 제가 구현한 것이 있습니다.입력 배열의 키는 $start_index부터 시작하는 증분 키로 다시 번호가 매겨집니다.
function array_reindex($array, $start_index)
{
$array = array_values($array);
$zeros_array = array_fill(0, $start_index, null);
return array_slice(array_merge($zeros_array, $array), $start_index, null, true);
}
언급URL : https://stackoverflow.com/questions/591094/how-do-you-reindex-an-array-in-php-but-with-indexes-starting-from-1
'programing' 카테고리의 다른 글
결과를 기다리지 않는 php exec 명령(또는 이와 유사) (0) | 2022.11.07 |
---|---|
array_module을 객체에 적용하시겠습니까? (0) | 2022.11.07 |
Python은 강한 타입입니까? (0) | 2022.11.06 |
Eclipse에서 테스트하는 동안 -D 시스템 속성을 통과하려면 어떻게 해야 합니까? (0) | 2022.11.06 |
Android 목록 기본 설정: 요약을 선택한 값으로 지정하시겠습니까? (0) | 2022.11.06 |