2

我有一个这样的数组:

array (size=8)
  'cb' => string '<input type="checkbox"/>' (length=24)
  'title' => string 'Name' (length=4)
  'download_category' => string 'Categories' (length=10)
  'download_tag' => string 'Tags' (length=4)
  'price' => string 'Price' (length=5)
  'sales' => string 'Sales' (length=5)
  **'earnings' => string 'Earnings' (length=8)**
  'shortcode' => string 'Purchase Short Code' (length=19)
  'date' => string 'Date' (length=4)

现在我想做的是将“收益”之一移动到第三个位置,如下所示:

array (size=9)
  'cb' => string '<input type="checkbox"/>' (length=24)
  'title' => string 'Name' (length=4)
  **'earnings' => string 'Earnings' (length=8)**
  'download_category' => string 'Categories' (length=10)
  'download_tag' => string 'Tags' (length=4)
  'price' => string 'Price' (length=5)
  'sales' => string 'Sales' (length=5)
  'shortcode' => string 'Purchase Short Code' (length=19)
  'date' => string 'Date' (length=4)

这个数组的前 9 个元素是静态的,因为顺序是固定的,但如果这很重要,这个数组可能会有更多元素(在“日期”之后)。

因此,我正在寻找一种简单的方法来将第 x 个元素移动到当前第 3 个元素的位置之前。

我尝试过的一件事是将前 2 个元素保存到变量中,然后取消设置它们。我还将收入元素取消设置为变量。所以数组从第三个元素开始。然后,因为我希望我的元素在第 3 个元素之前,并且我需要其他 2 个元素,如下所示:

$first = $array[0];
$second = $array[1];
$earnings_element = $array['earnings'];
unset($array[0]); 
unset($array[1]);
unset($array['earnings']);
array_unshift($array,$first,$second,$earnings_element);

问题是要么我丢失了元素名称(它变成了 1,2 等的键值),要么丢失了插入回 unshift 中的元素的值。

有人知道更简单的方法吗?

编辑:我在下面的代码中使用“数组”作为数组的名称。它不是实际数组的名称。

4

1 回答 1

3

试试这个:

$front = array_slice($array,0,2);
$front['earnings'] = $array['earnings'];
$back = array_slice($array,2);
unset($back['earnings']);
$array = array_merge($front,$back);
于 2013-05-07T14:06:36.850 回答