簡體   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