将关联数组中的键值存储到简单数组中的PHP代码

3

我有些难以理解,需要你的帮助,非常感谢...

我有一个名为$stores的数组,结构如下:

Array
(
[0] => Array
    (
        [id] => 123
        [name] => 'Store A'
    )

[1] => Array
    (
        [id] => 345
        [name] => 'Store B'
    )

[2] => Array
    (
        [id] => 567
        [name] => 'Store C'
    )

[3] => Array
    (
        [id] => 789
        [name] => 'Store D'
    )
)

我希望从这个数组中提取'id'值,并将其转换为以下形式的简单数组:
$simple = array(123,345,567,789);
5个回答

10

我正在运行PHP 5.5.34-0ubuntu0.13.04.1。出现错误“PHP致命错误:调用未定义的函数array_column()”。 - user3063045
那么我怀疑你实际运行的PHP版本与你认为的不一样。如果你是通过Web服务器页面运行代码,请尝试以同样的方式检查你的PHP版本(使用phpinfo()页面)。 - Calimero
或者,如果您担心BC问题,请查看其他回答以获取您的问题,它们中的所有内容都可能解决问题。 - Calimero
你是对的,我运行的是 PHP 5.4.9...不知道为什么 Ubuntu 打包成那样。我现在已经升级到 PHP 5.5 了,array_column 的工作符合预期。谢谢! - user3063045

3
Calimero 明确提供了 PHP 5.5+ 的最佳解决方案,但如果您想在之前的版本中实现 相同的 功能,请检查此存储库:https://github.com/ramsey/array_column。它由 PHP 5.5 的 array_column 创建者编写。

抢先一步了。我正准备在我的答案中加入那个。 - Jeremy Kendall

2
如果您无法升级php版本,可以简单地使用以下语法。在这种情况下,使用if (!function_exists('array_column')) 来防止函数重新声明,这可能会在版本升级时发生。 php.net的描述 array_column()返回数组中单个列的值,由column_key标识。 可选地,您可以提供一个index_key,将返回的数组中的值按输入数组中index_key列中的值进行索引。
/* Function array_column equivalent to php's array_column */
if (!function_exists('array_column'))
{

    function array_column(array $array, $column_key, $index_key = NULL)
    {
        if (isset($array))
        {
            $return = array();
            foreach ($array as $a)
            {
                if ($index_key)
                {
                    if (!isset($a[$index_key]))
                    {
                        return array();
                    }
                    else
                    {
                        $return[$a[$index_key]] = $a[$column_key];
                    }
                }
                else
                {
                    $return[] = $a[$column_key];
                }
            }
            return $return;
        }
        return array();
    }
}

以下是从 PHP.NET 获取的一些示例。
<?php
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

$first_names = array_column($records, 'first_name');
print_r($first_names);
?>

它将会产生以下输出:
Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

从记录集中获取姓氏列,由“id”列索引。
<?php
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
?>

它将会输出以下内容:
Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

2

如果您无法使用array_column,您可以使用array_map

$names = array(
    array('id' => 123, 'name' => 'A'),
    array('id' => 456, 'name' => 'B'),
    array('id' => 789, 'name' => 'C'),
);

$ids = array_map(function ($name) {
    return $name['id'];
}, $names);

var_dump($ids);

// output
array(3) {
    [0] => int(123)
    [1] => int(456)
    [2] => int(789)
}

1
$simple = [];

foreach ($stores as $store){
    $simple[] = $store['id'];
}

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