1

我搜索了 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?
        }
    }
}

无论我阅读和练习多少,我都在为多维数组和操作它们而苦苦挣扎!任何人都可以帮忙吗?

4

1 回答 1

4

这段代码应该这样做:

$newArray = array();

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

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

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

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

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

于 2013-10-03T19:47:34.857 回答