关于 PHP 函数 array map 的一些想法

发布于 2025-01-17 04:31:17 字数 3747 浏览 4 评论 0

array_map

array_map - 为数组的每个元素应用回调函数

说明

array array_map(callable $callback, array $array1[, array $...])

array_map():返回数组,是为 array1 每个元素应用 callback 函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

参数

  • callback
    • 回调函数,应用到每个数组里的元素
  • array1
    • 数组,遍历运行 callback 函数
  • ...
    • 数据列表,每个都遍历运行 callback 函数

范例

array_map 实现 foreach 的效果

<?php

class GraphicsCard
{
    public $brand;
    public $model;

    public function __construct($brand, $model)
    {
        $this->brand = $brand;
        $this->model = $model;
    }
}

$graphics_card = [
    [
        'brand'=>'华硕',
        'model'=>'GTX980(Ti)',
        'status'=>1,
    ],
    [
        'brand'=>'技嘉',
        'model'=>'GTX970',
        'status'=>0,
    ],
    [
        'brand'=>'微星',
        'model'=>'GTX960',
        'status'=>1,
    ],
    [
        'brand'=>'七彩虹',
        'model'=>'GTX950',
        'status'=>0,
    ],
];


$graphics_card2 = [];
foreach ($graphics_card as $value) {
    $graphics_card2[] = new GraphicsCard($value['brand'], $value['model']);
}

// Demo 1
$demoA1 = $graphics_card;
$demoA2 = $graphics_card2;
foreach ($demoA1 as $key => $value) {
    $demoA1[$key]['model'] = '1080';
    $demoA1[$key]['brand'] = '按摩店';
}
foreach ($demoA2 as $key => $item) {
    $demoA2[$key]->brand = '按摩店';
    $demoA2[$key]->model = '1080';
}
var_dump($demoA1);
var_dump($demoA2);

// Demo 2
$demoB1 = $graphics_card;
$demoB2 = $graphics_card2;
$demoB1 = array_map(function ($value) {
    $value['brand'] = '按摩店';
    $value['model'] = '1080';
    return $value;
}, $demoB1);
array_map(function ($value) {
    $value->brand = '按摩店';
    $value->model = '1080';
}, $demoB2);
var_dump($demoB1);
var_dump($demoB2);

// Demo 3
$demoC1 = $graphics_card;
$demoC2 = $graphics_card2;
array_map(function ($key, $value) use (&$demoC1) {
    $demoC1[$key]['brand'] = '按摩店';
    $demoC1[$key]['model'] = '1080';
}, array_keys($demoC1), $demoC1);
array_map(function ($key, $value) use ($demoC2) {
    $demoC2[$key]->brand = '按摩店';
    $demoC2[$key]->model = '1080';
}, array_keys($demoC2), $demoC2);
var_dump($demoC1);
var_dump($demoC2);

// Demo 4
$brands = [];
$models = [];
foreach ($graphics_card as $item) {
    $brands[] = $item['brand'];
}

$models = array_map(function ($value) {
    return $value['model'];
}, $graphics_card);

var_dump($brands);
var_dump($models);
// 也可以使用 array_column 来实现 Demo 4 的效果
var_dump(array_column($graphics_card, 'brand'));
var_dump(array_column($graphics_card, 'model'));

// Demo5
$items = [
    'item1'=>'Hello',
    'item2'=>'World',
    'item3'=>'Luis',
    'item4'=>'Edware',
    'item5'=>'Ann',
    'item6'=>'Eason',
];

foreach($items as $key => $value){
    if($key === 'item1'){
        $items[$key] = 'World';
    }elseif($key === 'item3'){
        $items[$key] = 'Edware';
    }
}
var_dump($items);

$items_to_modify = ['item1'=>'Hello','item3'=>'Luis'];
array_map(function($key,$value) use(&$items) {
    $items[$key] = $value;
},array_keys($items_to_modify),$items_to_modify);
var_dump($items);

使用 array_map 实现 array_column 的效果

<?php

function array_pluck($key, $input) {
    if (is_array($key) || !is_array($input)) return array();
    $array = array_map(function($value) use($key){
       if(array_key_exists($key, $value)) return $value[$key];
    },$input);
    return $array;
}

var_dump(array_pluck('brand',$graphics_card));
var_dump(array_column($graphics_card,'brand'));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

献世佛

暂无简介

文章
评论
25 人气
更多

推荐作者

七七

文章 0 评论 0

囍笑

文章 0 评论 0

盛夏尉蓝

文章 0 评论 0

ゞ花落谁相伴

文章 0 评论 0

Sherlocked

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文