为了账号安全,请及时绑定邮箱和手机立即绑定

在PHP中的任何位置上插入数组中的新项

/ 猿问

在PHP中的任何位置上插入数组中的新项

PHP
九州编程 2019-10-12 15:07:34

在PHP中的任何位置上插入数组中的新项

如何将新项插入到任何位置的数组中,例如在数组的中间?



查看完整描述

3 回答

?
繁星coding

你可能会发现这有点直观。它只需要调用一个函数array_splice:

$original = array( 'a', 'b', 'c', 'd', 'e' );$inserted = array( 'x' );
 // not necessarily an array, see manual quotearray_splice( $original, 3, 0, $inserted );
  // splice in at position 3// $original is now a b c x d e

如果替换只是一个元素,则不需要在其周围放置Array(),除非该元素是数组本身、对象或NULL。



查看完整回答
反对 回复 2019-10-13
?
ABOUTYOU

可以同时插入整数和字符串位置的函数:

/**
 * @param array      $array
 * @param int|string $position
 * @param mixed      $insert
 */function array_insert(&$array, $position, $insert){
    if (is_int($position)) {
        array_splice($array, $position, 0, $insert);
    } else {
        $pos   = array_search($position, array_keys($array));
        $array = array_merge(
            array_slice($array, 0, $pos),
            $insert,
            array_slice($array, $pos)
        );
    }}

整数用法:

$arr = ["one", "two", "three"];array_insert(
    $arr,
    1,
    "one-half");// ->array (
  0 => 'one',
  1 => 'one-half',
  2 => 'two',
  3 => 'three',)

字符串用法:

$arr = [
    "name"  => [
        "type"      => "string",
        "maxlength" => "30",
    ],
    "email" => [
        "type"      => "email",
        "maxlength" => "150",
    ],];array_insert(
    $arr,
    "email",
    [
        "phone" => [
            "type"   => "string",
            "format" => "phone",
        ],
    ]);// ->array (
  'name' =>
  array (
    'type' => 'string',
    'maxlength' => '30',
  ),
  'phone' =>
  array (
    'type' => 'string',
    'format' => 'phone',
  ),
  'email' =>
  array (
    'type' => 'email',
    'maxlength' => '150',
  ),)



查看完整回答
反对 回复 2019-10-13
?
HUWWW

没有任何本地PHP函数(据我所知)能够完全满足您的要求。

我写了两种我认为适合的方法:

function insertBefore($input, $index, $element) {
    if (!array_key_exists($index, $input)) {
        throw new Exception("Index not found");
    }
    $tmpArray = array();
    $originalIndex = 0;
    foreach ($input as $key => $value) {
        if ($key === $index) {
            $tmpArray[] = $element;
            break;
        }
        $tmpArray[$key] = $value;
        $originalIndex++;
    }
    array_splice($input, 0, $originalIndex, $tmpArray);
    return $input;}function insertAfter($input, $index, $element) {
    if (!array_key_exists($index, $input)) {
        throw new Exception("Index not found");
    }
    $tmpArray = array();
    $originalIndex = 0;
    foreach ($input as $key => $value) {
        $tmpArray[$key] = $value;
        $originalIndex++;
        if ($key === $index) {
            $tmpArray[] = $element;
            break;
        }
    }
    array_splice($input, 0, $originalIndex, $tmpArray);
    return $input;}

虽然速度更快,而且内存效率可能更高,但这只适用于不需要维护数组键的情况。

如果您确实需要维护密钥,下面的内容将更合适;

function insertBefore($input, $index, $newKey, $element) {
    if (!array_key_exists($index, $input)) {
        throw new Exception("Index not found");
    }
    $tmpArray = array();
    foreach ($input as $key => $value) {
        if ($key === $index) {
            $tmpArray[$newKey] = $element;
        }
        $tmpArray[$key] = $value;
    }
    return $input;}function insertAfter($input, $index, $newKey, $element) {
    if (!array_key_exists($index, $input)) {
        throw new Exception("Index not found");
    }
    $tmpArray = array();
    foreach ($input as $key => $value) {
        $tmpArray[$key] = $value;
        if ($key === $index) {
            $tmpArray[$newKey] = $element;
        }
    }
    return $tmpArray;}



查看完整回答
反对 回复 2019-10-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信