重命名多维关联数组中的键

时间:2013-10-03 19:44:00

标签: php arrays multidimensional-array

我搜索了SO和Google并发现了很多类似的问题,但没有任何内容符合我的确切用例。

我有一个像这样的数组:

Array
(
    [0] => Array
        (
            [id] => c80c5133-1140-8187-ad3b-524b4ed0f1a8
            [date_entered] => 10/01/2013 03:38pm
        )

    [1] => Array
        (
            [id] => 176815c6-b57f-7643-0f08-524b4f22b51c
            [date_entered] => 10/01/2013 03:42pm
        )

    [2] => Array
        (
            [id] => df0f8824-0b12-b92e-1d2e-524c6cb19c41
            [date_entered] => 10/02/2013 11:56am
        )

)

我需要将第一个维度的键重命名为第二个维度数组中date_entered键的值,这样我就可以(希望)按最近的日期对数组进行排序。我需要保留每个数组的内容,因为我需要获取与正确日期对应的ID。

Array
(
    [10/01/2013 03:38pm] => Array
        (
            [id] => c80c5133-1140-8187-ad3b-524b4ed0f1a8
            [date_entered] => 10/01/2013 03:38pm
        )

    [10/01/2013 03:42pm] => Array
        (
            [id] => 176815c6-b57f-7643-0f08-524b4f22b51c
            [date_entered] => 10/01/2013 03:42pm
        )

    [10/02/2013 11:56am] => Array
        (
            [id] => df0f8824-0b12-b92e-1d2e-524c6cb19c41
            [date_entered] => 10/02/2013 11:56am
        )

)

我试图这样做(这显然不正确),但对于我的生活,我仍然无法得到它。

foreach ($array as $key) {
    foreach ($key as $subkey => $subvalue) {
        if ($subkey == 'date_entered') {
            // change the name of the key?
        }
    }
}

无论我阅读和练习多少,我都在努力研究多维数组并操纵它们!有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

此代码应该这样做:

$newArray = array();

foreach ($array as $id => $dataset) {
  $newArray[ $dataset['date_entered'] ] = $dataset;
}

我在这里创建了一个新数组,因为“在foreach循环中更改数组可能会导致意外行为”source)。

如果确实需要保留原始数组,可以使用数字索引来访问元素:

$arrCount = count($array);
for ($i=0; $i<$arrCount; $i++) {
  $array[ $dataset['date_entered'] ] = $array[$i];
  unset($array[$i]);
}

所有元素在上一个键被取消设置/删除之前都会被复制。