如何将php数组索引设置为数组值...?

时间:2017-05-25 15:07:34

标签: php arrays multidimensional-array indexing

我从查询中获得了这个数组。

Array
(
    [0] => Array
        (
            [user_id] => 5
            [first_name] => Diyaa
            [profile_pic] => profile/user5.png
        )

    [1] => Array
        (
            [user_id] => 8
            [first_name] => Raj
            [profile_pic] => profile/user8.jpg
        )

    [2] => Array
        (
            [user_id] => 10
            [first_name] => Vanathi
            [profile_pic] => profile/user10.jpg
        )
)

我需要将数组索引设置为数组值user_id),如下所示:

Array
(
    [5] => Array
        (
            [user_id] => 5
            [first_name] => Diyaa
            [profile_pic] => profile/user5.png
        )

    [8] => Array
        (
            [user_id] => 8
            [first_name] => Raj
            [profile_pic] => profile/user8.jpg
        )

    [10] => Array
        (
            [user_id] => 10
            [first_name] => Vanathi
            [profile_pic] => profile/user10.jpg
        )
)

注意: user_id是一个唯一值,不再重复。无需担心索引值。

如何转换并获取指定索引值的数组..?

3 个答案:

答案 0 :(得分:4)

你可以尝试这段代码,在这里我做一些额外的工作。请参阅 AbraCadaver's clever answer $result = array_column($array, null, 'user_id');

array_combine(array_column($array, 'user_id'), $array);

答案 1 :(得分:4)

这正是array_column()的用途:

$result = array_column($array, null, 'user_id');
  

array_column()返回输入的单个列中的值,由column_key标识。 可选地,可以提供index_key,以通过输入数组的index_key列中的值索引返回数组中的值。

     

<强> column_key

     

要返回的值列。此值可以是要检索的列的整数键,也可以是关联数组或属性名称的字符串键名。 返回完整的数组或对象也可能为NULL(这与index_key一起用于重新索引数组)。

答案 2 :(得分:0)

这两种结构都是不必要的复杂和冗余。为什么不

$foo = array(5 =>
          array('first_name' => 'Diyaa',
                'profile_pic' => 'profile/user5.png'),
             8 =>
          array('first_name' => 'Raj',
                'profile_pic' => 'profile/user8.png'),
          ...
            );

然后通过$foo[$user_id]访问它,这将为您提供一个2元素的关联数组,例如

          array('first_name' => 'Raj',
                'profile_pic' => 'profile/user8.png'),

更改profile_pic:

$foo[$user_id]['profile_pic'] = $new_pic;