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

时间:2014-12-04 03:17:14

标签: php

我使用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()函数,但似乎是按字母顺序排列数组值而不是键。

4 个答案:

答案 0 :(得分:3)

您可以使用array_values以数字方式重新索引数组。

$newArray = array_values($array);

答案 1 :(得分:1)

如果您只想在该级别重新索引数组,则只需使用array_values();

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

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

答案 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',
)

在此处查看此操作: Sandbox

答案 3 :(得分:0)

您可以使用array_splice

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

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