【问题标题】:"Cut" an element by its key from an array通过数组中的键“剪切”一个元素
【发布时间】:2009-08-07 13:53:45
【问题描述】:

我有一个包含 n 个元素的索引数组:

Array(
    'key1'     => 'value1',
    'key2'     => 'value1',
    'key3'     => 'value1',
    ...
    'key<i-1>' => 'value<i-1>',
    'key<i>'   => 'value<i>',
    'key<i+1>' => 'value<i+1>',
    ...
    'key<n>'   => 'value<n>'
)

如何“剪切”(即:复制 + 删除)第 i_th 个元素,因此结果数组为:

Array(
    'key1'     => 'value1',
    'key2'     => 'value1',
    'key3'     => 'value1',
    ...
    'key<i-1>' => 'value<i-1>',
    'key<i+1>' => 'value<i+1>',
    ...
    'key<n>'   => 'value<n>'
)

我知道 array_pop() 和 array_shift() PHP 函数,但是是否有一个通用的函数可以通过它的键“剪切”一个元素?

谢谢。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以使用以下代码检索并删除其索引处的元素:

    function array_cut(&$array, $key) {
      if(!isset($array[$key])) return null;
    
      $keyOffset = array_search($key, array_keys($array));
      $result = array_values(array_splice($array, $keyOffset, 1));
      return $result[0];
    }
    

    然后你可以这样使用它:

    echo "Numerically Index Test:\n";
    
    $a = array(0,1,2,3,4,5,6);
    echo array_cut($a, 2) . "\n";
    var_dump($a);
    
    echo "------------------------------\n";
    
    echo "Assosiative Index Test:\n";
    
    $b = array('hello' => 'world', 'how' => 'like that', 'where' => 'Stack Overflow');
    echo array_cut($b, 'how') . "\n";
    var_dump($b);
    

    输出:

    Numerically Index Test:
    2
    array(6) {
      [0]=>
      int(0)
      [1]=>
      int(1)
      [2]=>
      int(3)
      [3]=>
      int(4)
      [4]=>
      int(5)
      [5]=>
      int(6)
    }
    ------------------------------
    Assosiative Index Test:
    like that
    array(2) {
      ["hello"]=>
      string(5) "world"
      ["where"]=>
      string(14) "Stack Overflow"
    }
    

    【讨论】:

      【解决方案2】:
      unset($myarray['mykey']);
      

      【讨论】:

      • 这只会删除元素,但不会在之前复制它(复制+删除=“剪切”),所以我更喜欢安德鲁的回答。谢谢。
      【解决方案3】:

      array_splice() 可能有一个空替换?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多