繁体   English   中英

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

[英]PHP array_filter to get only one value from an array

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

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

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

    var_dump($ids);

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

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)

为什么不是输出:

array (size=3)
  0 => int 1
  1 => int 2
  2 => int 3

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);

正如另一个答案所提到的,如果您只想提取一个“列”,那么array_column是一个更简单的选项。

试试这个代码

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

    $ids = array_column($data, 0);
    var_dump($ids);

filter 函数需要为每个项目返回一个布尔值(或任何可以强制为 true 的值),以便它可以被保留。 所以在你的情况下,它总是为数组中的每个元素返回 true

要获得结果,您必须使用 array_walk;

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


 array_walk($data, function($value, $key) use ($data){
                  $data[$key] = $value[0];
           })

array_filter 中包含的函数必须返回 true 或 false。 0 或空数组被转换为 FALSE。 非零数字被视为真。

所以如果你想找到一个 id 为 2 的项目,你应该像这样将它与 2 进行比较

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

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

var_dump($ids);

输出

array(1) {
  [1] =>
  array(2) {
    [0] =>
    int(2)
    [1] =>
    string(5) "test2"
  }
}

试试下面的代码

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

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

    var_dump($ids);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM