Popping the key & value from an associative array in PHP

前端 未结 4 1697
梦谈多话
梦谈多话 2021-02-07 00:14

Let S be an associative array in PHP, I need to retrieve and extract from it the first element, both the value and the key.

I would use

value1=array_pop         


        
相关标签:
4条回答
  • 2021-02-07 00:31

    array_slice

    $arr = array('k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3');
    
    $a = array_slice($arr, 0, 1);
    var_dump($a);
    
    $arr = array_slice($arr, 1);
    var_dump($arr);
    
    
    array(1) {
      ["k1"]=>
      string(2) "v1"
    }
    array(2) {
      ["k2"]=>
      string(2) "v2"
      ["k3"]=>
      string(2) "v3"
    }
    
    0 讨论(0)
  • 2021-02-07 00:33
    $value = reset($array);
    $key = key($array);
    

    Edit: Hakre just beat me to it :-)

    0 讨论(0)
  • 2021-02-07 00:51
    $value = reset($arr);
    $key = key($arr);
    

    (in that order)

    See reset()PHP Manual, key()PHP Manual.

    unset($arr[$key]); # in case you want to remove it.
    

    However array_pop()PHP Manual is working with the last element:

    $value = end($arr);
    $key = key($arr);
    unset($arr[$key]); # in case you want to remove it.
    

    See end()PHP Manual.

    For the fun:

    list($value, $key) = array(end($arr), key($arr));
    

    or

    extract(array('value'=>end($arr), 'key'=>key($arr)));
    

    or

    end($arr);
    list($key, $value) = each($arr);
    

    or whatever style of play you like ;)

    Dealing with empty arrays

    It was missing so far to deal with empty arrays. So it's a need to check if there is a last (first) element and if not, set the $key to null (as null can not be an array key):

    for($key=null;$key===null&&false!==$value=end($arr);)
        unset($arr[$key=key($arr)]);
    

    This will give for a filled array like $arr = array('first' => '1st', 'last' => '2nd.');:

    string(4) "2nd." # value
    string(4) "last" # key
    array(1) { # leftover array
      ["first"]=>
      string(3) "1st"
    }
    

    And an empty array:

    bool(false) # value
    NULL # key
    array(0) { # leftover array
    }
    

    Afraid of using unset?

    In case you don't trust unset() having the performance you need (of which I don't think it's really an issue, albeit I haven't run any metrics), you can use the native array_pop() implementation as well (but I really think that unset() as a language construct might be even faster):

    end($arr);
    $key = key($arr);
    $value = array_pop($arr);
    
    0 讨论(0)
  • 2021-02-07 00:54
    list($value, $key) = array(reset($s), key($s));
    array_shift($s); // or just unset($s[$key]);
    

    Of course you can split the first statement into two separate.

    0 讨论(0)
提交回复
热议问题