[php] велосипед для вставки элементов в массив

Discussion in 'PHP' started by Дикс, 3 Sep 2010.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    искал готовое решение, но как-то не нашёл.
    суть функции: можно вставить элемент (или массив "ключ-значение") в существующий массив после указанного элемента.


    PHP:
    <pre><?php

    function insertAt(&$arr$afterMark$elem)
    {
        
    $pos array_search($afterMark$arr);

        if(
    $pos === FALSE)
            return 
    0;

        if(
    $pos !== FALSE && !is_int($pos)) // если найденный ключ не является числом - массив ассоциативный и ключ найден
        
    {
            
    $founded 0;
            
    $tmpTail = array();
            
    $head = array();
            foreach(
    $arr as $el => $kol)
            {

                if(
    $founded)
                    
    $tmpTail[$el] = $kol;
                else
                    
    $head[$el] = $kol;

                if(
    $el == $pos)
                    
    $founded 1;

            }

            
    $arr $head;

        }else
            
    $tmpTail array_splice($arr$pos 1);

        if(
    is_array($elem))
           
    $arr array_merge($arr$elem);
        else
            
    $arr[] = $elem;

        
    $arr array_merge($arr$tmpTail);

        return 
    1;
    }

    $arr = array();
    $arr['oneKey'] = 'one';
    $arr['twoKey'] = 'two';
    $arr['threeKey'] = 'three';

    $arr2 = array();
    $arr2[] = 'one';
    $arr2[] = 'two';
    $arr2[] = 'three';

    $t '2.5';

    insertAt($arr'two'$t);
    insertAt($arr2'one''test');
    insertAt($arr2'two', array('sw' => $t));

    print_r($arr);
    print_r($arr2);

    Так вот к чему я это пишу - есть лучшее решение данной задачи?
    И если нет - то как можно улучшить/оптимизировать эту функцию?