代码之家  ›  专栏  ›  技术社区  ›  uzay95

php中的pop数组

  •  0
  • uzay95  · 技术社区  · 15 年前

    我需要这个输出

    Array
    (
       [id:>] => 0
       [isonline] => 0
       [userclass_id] => 3
    )
    

    我用这个代码得到这个输出:

    $pr = array('id:>'=>$id,'isonline'=>'0','userclass_id'=>'3');
    print_r($params);
    

    这很好。但我想弹出新的元素来逐个排列。 当我使用此代码时:

    $params = array();
    array_push($params,array('userclass_id'=>'3'));  //  Members
    array_push($params,array('isonline'=>'0')); // Online
    array_push($params,array('id:>'=>$id));  
    

    我得到这个输出:

    Array
    (
    [0] => Array
        (
            [userclass_id] => 3
        )
    
    [1] => Array
        (
            [isonline] => 0
        )
    
    [2] => Array
        (
            [id:>] => 0
        )
    )
    

    我想动态地添加新元素,但也希望有第一个输出。谢谢你的帮助。

    6 回复  |  直到 15 年前
        1
  •  4
  •   null    15 年前

    关联数组中键值的顺序无关紧要。所以你不需要 array_push array_unshift . 您唯一需要做的就是将一个键与您想要的值相关联(反之亦然)。因此,您可以编写以下内容来动态地将值添加到 $params 数组。

    $key = "my_id:2";
    $value = "23";
    $params[$key] = $value;
    

    是的,不要移动或推…只需添加 $key 在方括号和你的一切之间。

        2
  •  1
  •   erenon    15 年前
    $element = array();
    $element['userclass_id'] = 3;
    $element['isoline'] = 0;
    $element['id:>'] = $id;
    
    $params[] = $element
    
        3
  •  1
  •   ftrotter mario    15 年前

    您使用的是向数组末尾添加元素的数组“push”。您应该使用数组“unshift”,它将在数组的开头预先准备新项。

    当程序依赖于PHP中的数组顺序时…数组弹出、数组推送、数组移位和数组取消拆分是您的朋友。认识他们…爱他们…

    php manual entry for array_unshift

        4
  •  1
  •   Powerlord    15 年前

    埃伦的回答可能更好,但如果你 真的? 要一次添加一个元素的子数组:

    $params = array();
    array_unshift($params,array('userclass_id'=>'3'));  //  Members
    $params[0]['isonline'] = 0;                         //  Online
    $params[0]['id:>'] = $id;
    

    这是因为数组unshift将元素放在数组的开头,因此新的子数组将 总是 元素0。

    出于性能原因,您可能希望这样做,这样就不会不断地对元素重新编号:

    $params = array();
    $params[] = array('userclass_id'=>'3');  //  Members
    end($params); // Move to the new element
    $key = key($params); // Get the key of the new element
    $params[$key]['isonline'] = 0;           //  Online
    $params[$key]['id:>'] = $id;
    
        5
  •  1
  •   ajcates    15 年前

    所发生的是,您将新数组推送到当前数组中,而不是将新数组合并到旧数组中。 $params=array();

    $params = array_merge($params, array('userclass_id' => 3));  //  Members
    $params = array_merge($params, array('isonline'=>'0')); // Online
    $params = array_merge($params, array('id:>' => $id));
    

    或者更好的是,您只需调用一次数组合并并传递所有值

    $params = array_merge($params, array('userclass_id' => 3), array('isonline' => '0'), array('id:>' => $id));
    

    另一种获得所需输出的方法是直接在数组上分配键。

    $params = array();
    $params['userclass_id'] = 3;
    $params['isoline'] = 0;
    $params['id:>'] = $id;
    

    也许最好的方法就是在创建数组时分配键。

    $params = array(
        'userclass_id' => 3,
        'isoline' => 0,
        'id:>' => $id
    );
    
        6
  •  0
  •   grantwparks    15 年前

    只是怎么样

    $aParams[] = array(
        'userclass_id' => 3,
        'isoline' => 0,
        'id:>' => $id
    );
    

    我非常喜欢用这种方式分配数组条目中的所有值,而不是单个赋值语句。