PHP - 取消设置值后对数组键重新编号


PHP - Renumbering Array Keys After Unsetting Value

我使用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 离开,它就会从 0 变为 2,而不是 Nick 采用数组键 1。现在我可以自己想办法做到这一点,但我非常希望有一些专门用于解决此问题的 PHP 函数,即将这些数组键重命名为正确的数字顺序。我检查了sort((函数,但这似乎是按字母顺序排列数组值而不是键。

您可以使用

array_values以数字方式重新索引数组。

$newArray = array_values($array);

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

例如,假设您要删除"bob"条目,只需在删除 bob 后直接在 bob 上方的级别调用 array_values。

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

我会像这样使用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',
)

在这里看到它的实际应用:沙盒

您可以使用

array_splice

$removedElement = array_splice($data['user1'][2], $indexOfUserToRemove, 1);

这将更改重新索引它的原始数组,但前提是数组的键是数字。