📜  如何在PHP重新索引数组?

📅  最后修改于: 2022-05-13 01:54:11.130000             🧑  作者: Mango

如何在PHP重新索引数组?

数组的重新索引可以通过使用一些内置函数来完成。这些功能是:

  • array_combine()函数: array_combine()函数是PHP的一个内置函数,用于组合两个数组并通过使用一个数组作为键和另一个数组作为值来创建一个新数组。也就是说,一个数组的所有元素将成为新数组的键,而第二个数组的所有元素将成为这个新数组的值。
  • range()函数: range()函数是PHP的一个内置函数,用于在给定范围(从低到高)内创建任何类型的元素(例如整数、字母)的数组,即考虑列表的第一个元素低,最后一个被认为是高。
  • count()函数: count()函数用于对数组中的当前元素进行计数。对于已设置为空数组的变量,该函数可能会返回 0。同样对于未设置的变量,函数返回 0。
  • array_values()函数:此函数用于从另一个可能包含键值对或仅包含值的数组中获取值数组。该函数创建另一个数组,在其中存储所有值,并默认为这些值分配数字键。

我们将使用 array_values()函数获取数组的所有值,使用 range()函数创建一个元素数组,我们希望将其用作数组的新键或新索引(重新索引)。然后 array_combine()函数会将数组组合为键和值。

示例 1:

 'Tony',
    1 => 'Stark',
    2 => 'Iron', 
    3 => 'Man' 
);
  
echo "Array before re-indexing\n";
  
// Using foreach loop to print array elements
foreach( $arr as $key => $value) { 
    echo "Index: " . $key . " Value: " . $value . "\n"; 
}
  
// Set the index number from three
$New_start_index = 3;
  
$arr = array_combine(range($New_start_index, 
                count($arr) + ($New_start_index-1)),
                array_values($arr));
  
echo "\nArray after re-indexing\n";
  
// Using foreach loop to print array elements
foreach( $arr as $key => $value) { 
    echo "Index: ".$key." Value: ".$value."\n"; 
}
  
?>
输出:
Array before re-indexing
Index: 0 Value: Tony
Index: 1 Value: Stark
Index: 2 Value: Iron
Index: 3 Value: Man

Array after re-indexing
Index: 3 Value: Tony
Index: 4 Value: Stark
Index: 5 Value: Iron
Index: 6 Value: Man

示例2:在数组的开头添加一些数据,然后从索引开始对数组进行切片。



 'Tony',
    1 => 'Stark',
    2 => 'Iron', 
    3 => 'Man'
);
  
echo "Array before re-indexing\n";
  
// Using foreach loop to print array elements
foreach( $arr as $key => $value) { 
    echo "Index: " . $key . " Value: " . $value . "\n"; 
}
  
// Set the index number from three
$New_start_index = 3;
  
$raw_data = range( 0, $New_start_index-1 );
  
// Add data to the start of the array
foreach( $raw_data as $key => $value) {
    array_unshift($arr, $value);
}
  
  
$arr = array_values($arr);
  
// Remove the unnecessary index so we start at 10
$arr = array_slice($arr, $New_start_index, count($arr), true);
echo "\nArray after re indexing\n";
  
// Using foreach loop to print array 
foreach( $arr as $key => $value) { 
    echo "Index: ".$key." Value: ".$value."\n"; 
}
  
?>
输出:
Array before re-indexing
Index: 0 Value: Tony
Index: 1 Value: Stark
Index: 2 Value: Iron
Index: 3 Value: Man

Array after re indexing
Index: 3 Value: Tony
Index: 4 Value: Stark
Index: 5 Value: Iron
Index: 6 Value: Man

在这个例子中,首先向数组添加一些数据,为此我们再次在循环的帮助下执行此操作,然后删除我们添加的数据,因此重新索引数组也不是一个好的选择。此方法不适用于重新索引字母键。

示例 3:此示例从字母“p”重新索引数组。两个额外的函数用于重新索引字母,它们是:

  • ord()函数: ord()函数是PHP中的一个内置函数,它返回字符串第一个字符的 ASCII 值。
  • chr()函数: chr()函数是PHP的一个内置函数,用于将 ASCII 值转换为字符。
 'India',
    'b' => 'America',
    'c' => 'Russia',
    'd' => 'China'
);
  
echo "Array before re-indexing\n";
  
// Using foreach loop to print array elements
foreach( $arr as $key => $value) { 
    echo "Index: " . $key . " Value: " . $value . "\n"; 
}
  
// Set the index from 'p'
$New_start_index = 'p';
  
// The ord() function is used to get ascii value
// The chr() function to convert number to ASCII char
$arr = array_combine(range($New_start_index, 
            chr(count($arr) + (ord($New_start_index)-1))),
            array_values($arr));
  
echo "\nArray after re indexing\n";
  
// Using foreach loop to print array 
foreach( $arr as $key => $value) { 
    echo "Index: " . $key . " Value: " . $value . "\n"; 
}
  
?>
输出:
Array before re-indexing
Index: a Value: India
Index: b Value: America
Index: c Value: Russia
Index: d Value: China

Array after re indexing
Index: p Value: India
Index: q Value: America
Index: r Value: Russia
Index: s Value: China