PHP - 删除数组值后重新编号数组键名

7

我使用PHP数组来存储用户在网站上关注的所有人的数据。以下是我设置的示例:

$data = array(
    ['user1'] => array(
        [0] => 'somedata',
        [1] => 'moredata',
        [2] => array(
            [0] => 'Jim',
            [1] => 'Bob',
            [2] => 'Nick',
            [3] => 'Susy',
        )
    ),
);

正如您所看到的,$data[user][2] 列出了所有的朋友。这个数组的外观和 [0] 和 [1] 为键是因为 var_export() 是这样做的。现在我的问题是,当有人取消关注某人时,我使用 unset() 从数组中删除该朋友。所以如果我想取消对上面例子中的 Bob 的关注,那么它将只剩下 Jim、Nick 和 Susy。
现在唯一的问题是,当它们重新命名时,数组键不会正确地重新编号。因此,一旦 Bob 消失了,它就从 0 变成了 2,而不是让 Nick 接管数组键 1。现在我可以想出自己的方法来解决这个问题,但我非常希望有一些 PHP 函数专门用于解决这个问题,也就是将这些数组键重命名为正确的数字顺序。我查看了 sort() 函数,但似乎是用于按字母顺序排列数组值而不是键。

1
你正在使用 var_export() 并将数组保存到磁盘或类似位置,而不是将其存储在数据库中? - Michael Berkowski
4个回答

9
您可以使用array_values函数将数组重新索引为数字。
$newArray = array_values($array);

1

如果您只想重新索引该级别的数组,则可以简单地使用array_values()函数;

例如,假设您要删除“bob”条目,只需在删除后直接在bob上面的级别调用array_values()函数即可。

unset($data['user1'][2][1]);
$data['user1'][2] = array_values($data['user1'][2]);

1
我会把array_values这样使用: $data['user1'][2]=array_values($data['user1'][2]); 以下是完整的代码:
$data = array(
    'user1' => array(
        'somedata',
        'moredata',
        array(
            'Jim',
            'Bob',
            'Nick',
            'Susy',
        )
    ),
);

unset($data['user1'][2][1]);
var_export ($data['user1'][2]);

echo "\n\n";
$data['user1'][2]=array_values($data['user1'][2]);

var_export($data['user1'][2]);

结果

array (
  0 => 'Jim',
  2 => 'Nick',
  3 => 'Susy',
)

array (
  0 => 'Jim',
  1 => 'Nick',
  2 => 'Susy',
)

在这里看它的运作: 沙盒

0
你可以使用 array_splice 函数。
$removedElement = array_splice($data['user1'][2], $indexOfUserToRemove, 1);

这会改变原始数组并重新索引它,但仅当数组的键是数字时。


我也会研究一下这个,并看看哪一个(这个或其他帖子)更好用。谢谢! - Tai Kwangi Chicken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接