【问题标题】:PHP Insert value in Array (alphabet key)PHP 在数组中插入值(字母键)
【发布时间】:2016-05-04 09:43:21
【问题描述】:

我有数组

array (
   a =>  "1",
   b =>  "2",
   c =>  "3"
 )

如果我在位置“b”处插入“4”。 位置 b 的旧值移动到位置“c”。 位置 c 的旧值移动到位置“d”。

注意位置“d”是在插入值时自动创建的。如果数组中的键是 a,b,c,d,e,f,g 当在数组中插入值时,它会自动创建位置 "h"

所以结果是:

array (
   a =>  "1",
   b =>  "4",
   c =>  "2",
   d =>  "3"
 )

我该怎么做?或者有什么建议

【问题讨论】:

  • 你需要做 $array['d'] = $array['b'] 之前
  • 什么...你是怎么做的?请详细说明/更新您的问题。
  • 你想要foreach(range('a','z') as $al){ $new[$al] = $al; }这样的东西吗??
  • 我编辑我的问题。我希望我能解释得更多。
  • 是否存在数组只有a,e的情况。如果在这种情况下我插入b,会发生什么?

标签: php arrays


【解决方案1】:

这是使用array_keysarray_searcharray_slice 函数的addToStack 函数:

$arr = array(
    'a' =>  "1",
    'b' =>  "2",
    'c' =>  "3"
);

/**
 * Inserts a new element to stack with offset
 * @param $arr the initial array passed by reference
 * @param $pos string key (position)
 * @param $value inserted value
*/
function addToStack(&$arr, $pos, $value) {
    $keys = array_keys($arr);
    $offset = array_search($pos, $keys);
    $rest = array_slice($arr, $offset);

    $arr[$pos] = $value;
    foreach ($rest as $v) {
        $arr[++$pos] = $v;
    }
}

addToStack($arr, 'b', '4');
print_r($arr);

输出:

Array
(
    [a] => 1
    [b] => 4
    [c] => 2
    [d] => 3
)

【讨论】:

    【解决方案2】:

    这个技巧可能会对你有所帮助。

    首先,您需要使用arraykeyvalue 调用函数。在函数中首先检查密钥是否存在。如果键存在则存储值,现在用键和值设置数组中的值,使用end 函数找到最后一个键,然后将值增加一个以获取下一个字符,如果键不存在但不存储相同价值。

    $arr = array (
       'a' =>  "1",
       'b' =>  "2",
       'c' =>  "3"
     );
    
    function array_push_user($arr, $key, $val){
        $store = '';
        $bk = '';
        if(array_key_exists($key, $arr)){
            foreach($arr as $keys => $vals){
                if($keys == $key){
                    $store = $val;
                    $bk = $vals;
                    $lst = $keys;
                }else{
                    if($bk != ""){
                        $store = $bk;
                        $bk = $vals;
                    }
                    else
                        $store = $vals;
                    $lst = $keys;
                }
                $arr[$lst] = $store;
            }
            $arr[chr(ord($lst)+1)] = $bk;
        }else{
            end($arr);
            $lst = key($arr);
            $arr[chr(ord($lst)+1)] = $val;
        }   
        return $arr;
    }
    
    
    
    $ret_arr = array_push_user($arr, 'b', '4');
    echo '<pre>';
    print_r($ret_arr);
    

    结果

    Array
    (
        [a] => 1
        [b] => 4
        [c] => 2
        [d] => 3
    )
    

    【讨论】:

    • 应该是c =&gt; "2",
    • Opps..,让我检查一下。
    • @RomanPerekhrest,我以自己的方式做到了。但你做得很聪明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2014-02-04
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多