我搜索了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?
}
}
}
无论我阅读和练习多少,我都在努力研究多维数组并操纵它们!有人可以帮忙吗?
答案 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]);
}
所有元素在上一个键被取消设置/删除之前都会被复制。