PHP array_filter只从数组中获取一个值

Ben*_*Ben 6 php arrays

我试图排除foreach循环并使用数组函数重构它们.我假设下面的代码会给我一个源数组中所有第一项的结果.

<?php
    $data= [
        0 => [1, 'test1'],
        1 => [2, 'test2'],
        2 => [3, 'test3'],
    ];

    $ids = array_filter($data, function($item) {
        return $item[0];
    });

    var_dump($ids);
Run Code Online (Sandbox Code Playgroud)

但是当我$ids得到var_dump时,我得到了输出:

array (size=3)
  0 => 
    array (size=2)
      0 => int 1
      1 => string 'test1' (length=5)
  1 => 
    array (size=2)
      0 => int 2
      1 => string 'test2' (length=5)
  2 => 
    array (size=2)
      0 => int 3
      1 => string 'test3' (length=5)
Run Code Online (Sandbox Code Playgroud)

为什么不输出:

array (size=3)
  0 => int 1
  1 => int 2
  2 => int 3
Run Code Online (Sandbox Code Playgroud)

iai*_*inn 10

array_filter用于根据数组是否满足某个标准来过滤掉数组的元素.因此,您创建一个返回true或false的函数,并针对它测试数组的每个元素.您的函数将始终返回true,因为每个数组都包含第一个元素,因此数组不会更改.

您正在寻找的是array_map,它通过在其上运行回调来修改数组中的每个元素.

<?php
$data= [
    0 => [1, 'test1'],
    1 => [2, 'test2'],
    2 => [3, 'test3'],
];

$ids = array_map(function($item) {
    return $item[0];
}, $data);

var_dump($ids);
Run Code Online (Sandbox Code Playgroud)


小智 9

试试这个代码

$data= [
        0 => [1, 'test1'],
        1 => [2, 'test2'],
        2 => [3, 'test3'],
    ];

    $ids = array_column($data, 0);
    var_dump($ids);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,遗憾的是它是来自已删除用户的纯代码答案。这正是 `array_column()` 的用途。 (3认同)