PHP.mk документација

array_map

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.array-map.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.array-map.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
array_map

Референца за `function.array-map.php` со подобрена типографија и навигација.

function.array-map.php

array_map

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

array_mapЈа применува функцијата на елементите од дадените низи

= NULL

array_map(?callable $callback, array $array, array ...$arrays): array

array_map() враќа array кои ги содржат резултатите од применувањето на callback на соодветната вредност од arrayarrays ако се обезбедени повеќе низи) што се користат како аргументи за повиканата функција. Бројот на параметри што ги прифаќа callback функцијата треба да одговара на бројот на низите предадени на array_map(). Дополнителните низи за внес се игнорираат. Се фрла ArgumentCountError ако е обезбеден недоволен број аргументи.

Параметри

callback

А callable за извршување за секој елемент во секоја низа.

null може да се предаде како вредност на callback за да се изврши операција на спојување на повеќе низи и да се врати низа каде што секој елемент е низа што ги содржи елементите од влезните низи на истата позиција на внатрешниот покажувач на низата (види пример подолу). Ако е обезбедена само array една низа array_map() ,

array

ќе ја врати влезниот низ. callback function.

arrays

Низа за поминување низ callback function.

Вратени вредности

Дополнителна променлива листа на аргументи на низи за поминување низ callback Враќа низа што ги содржи резултатите од применувањето на arrayarrays функцијата на соодветната вредност од

ако се обезбедени повеќе низи) што се користат како аргументи за повиканата функција.

Дневник на промени

Верзија = NULL
8.0.0 Враќа callback очекува параметар да биде предаден со референца, оваа функција сега ќе емитува E_WARNING.

Примери

Пример #1 array_map() example

<?php
function cube($n)
{
return (
$n * $n * $n);
}

$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>

Ова прави $b има:

Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)

Пример #2 array_map() користење на ламбда функција

<?php
$func
= function(int $value): int {
return
$value * 2;
};

print_r(array_map($func, range(1, 5)));

// Or as of PHP 7.4.0:

print_r(array_map(fn($value): int => $value * 2, range(1, 5)));

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)

Пример #3 array_map() - користење повеќе низи

<?php
function show_Spanish(int $n, string $m): string
{
return
"The number {$n} is called {$m} in Spanish";
}

function
map_Spanish(int $n, string $m): array
{
return [
$n => $m];
}

$a = [1, 2, 3, 4, 5];
$b = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];

$c = array_map('show_Spanish', $a, $b);
print_r($c);

$d = array_map('map_Spanish', $a , $b);
print_r($d);
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

// printout of $c
Array
(
    [0] => The number 1 is called uno in Spanish
    [1] => The number 2 is called dos in Spanish
    [2] => The number 3 is called tres in Spanish
    [3] => The number 4 is called cuatro in Spanish
    [4] => The number 5 is called cinco in Spanish
)

// printout of $d
Array
(
    [0] => Array
        (
            [1] => uno
        )

    [1] => Array
        (
            [2] => dos
        )

    [2] => Array
        (
            [3] => tres
        )

    [3] => Array
        (
            [4] => cuatro
        )

    [4] => Array
        (
            [5] => cinco
        )

)

Обично кога се користат две или повеќе низи, тие треба да бидат со еднаква должина бидејќи функцијата за повикување се применува паралелно на соодветните елементи. Ако низите се со нееднаква должина, пократките ќе бидат проширени со празни елементи за да одговараат на должината на најдолгата.

Интересна употреба на оваа функција е да се конструира низа од низи, што може лесно да се изврши со користење на null како име на функцијата за повикување

Пример #4 Изведување операција на спојување на низи

<?php
$a
= [1, 2, 3, 4, 5];
$b = ['one', 'two', 'three', 'four', 'five'];
$c = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];

$d = array_map(null, $a, $b, $c);
print_r($d);
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )

    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => dos
        )

    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => tres
        )

    [3] => Array
        (
            [0] => 4
            [1] => four
            [2] => cuatro
        )

    [4] => Array
        (
            [0] => 5
            [1] => five
            [2] => cinco
        )

)

Генератор null callback само со array

<?php
$array
= [1, 2, 3];
var_dump(array_map(null, $array));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

Пример #6 array_map() - со клучни зборови од тип стринг

<?php
$arr
= ['stringkey' => 'value'];
function
cb1($a) {
return [
$a];
}
function
cb2($a, $b) {
return [
$a, $b];
}
var_dump(array_map('cb1', $arr));
var_dump(array_map('cb2', $arr, $arr));
var_dump(array_map(null, $arr));
var_dump(array_map(null, $arr, $arr));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(1) {
  ["stringkey"]=>
  array(1) {
    [0]=>
    string(5) "value"
  }
}
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "value"
    [1]=>
    string(5) "value"
  }
}
array(1) {
  ["stringkey"]=>
  string(5) "value"
}
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "value"
    [1]=>
    string(5) "value"
  }
}

Пример #6 Основна употреба на array_map() - асоцијативни низи

Додека array_map() не поддржува директно користење на клучот на низата како влез, тоа може да се симулира со користење на array_keys().

<?php
$arr
= [
'v1' => 'First release',
'v2' => 'Second release',
'v3' => 'Third release',
];

// Note: Before 7.4.0, use the longer syntax for anonymous functions instead.
$callback = fn(string $k, string $v): string => "$k was the $v";

$result = array_map($callback, array_keys($arr), array_values($arr));

var_dump($result);
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(3) {
  [0]=>
  string(24) "v1 was the First release"
  [1]=>
  string(25) "v2 was the Second release"
  [2]=>
  string(24) "v3 was the Third release"
}

Види Исто така

  • array_filter() - Филтрира елементи од низа користејќи функција за повикување
  • array_reduce() - Итеративно намалувајте ја низата до една вредност користејќи функција за повикување
  • array_walk() - Применете корисничка функција на секој член од низа

Белешки од корисници 8 белешки

[email protected]
12 години пред
Let's assume we have following situation:

<?php
class MyFilterClass {
    public function filter(array $arr) {
        return array_map(function($value) {
            return $this->privateFilterMethod($value);
        });
    }

    private function privateFilterMethod($value) {
        if (is_numeric($value)) $value++;
        else $value .= '.';
    }
}
?>

This will work, because $this inside anonymous function (unlike for example javascript) is the instance of MyFilterClass inside which we called it.
I hope this would be useful for anyone.
[email protected]
пред 17 години
To transpose rectangular two-dimension array, use the following code:

array_unshift($array, null);
$array = call_user_func_array("array_map", $array);

If you need to rotate rectangular two-dimension array on 90 degree, add the following line before or after (depending on the rotation direction you need) the code above:
$array = array_reverse($array);

Here is example:

<?php
$a = array(
  array(1, 2, 3),
  array(4, 5, 6));
array_unshift($a, null);
$a = call_user_func_array("array_map", $a);
print_r($a);
?>

Output:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 4
        )

    [1] => Array
        (
            [0] => 2
            [1] => 5
        )

    [2] => Array
        (
            [0] => 3
            [1] => 6
        )

)
[email protected]
пред 2 години
If the callback function to be called is a static method from a different namespace, the fully qualified method including namespace must be specified (a use statement is not sufficient to resolve the namespace of the callback function)

<?php
use MyTools;

$arr = [1, 2, 3];

$arr = array_map('Tools::myHelper', $arr);
?>

will cause TypeError: 
array_map() expects parameter 1 to be a valid callback, class 'Tools' not found.

Use the fully qualified name for the callback instead:

<?php
$arr = [1, 2, 3];

$arr = array_map('\MyTools\Tools::myHelper', $arr);
?>
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
пред 10 години
You may be looking for a method to extract values of a multidimensional array on a conditional basis (i.e. a mixture between array_map and array_filter) other than a for/foreach loop. If so, you can take advantage of the fact that 1) the callback method on array_map returns null if no explicit return value is specified (as with everything else) and 2) array_filter with no arguments removes falsy values. 

So for example, provided you have:

<?php
$data = [
    [
        "name" => "John",
        "smoker" => false
    ],
    [
        "name" => "Mary",
        "smoker" => true
    ],
    [
        "name" => "Peter",
        "smoker" => false
    ],
    [
        "name" => "Tony",
        "smoker" => true
    ]
];
?>

You can extract the names of all the non-smokers with the following one-liner:

<?php
$names = array_filter(array_map(function($n) { if(!$n['smoker']) return $n['name']; }, $data));
?>

It's not necessarily better than a for/foreach loop, but the occasional one-liner for trivial tasks can help keep your code cleaner.
CertaiN
12 години пред
The most memory-efficient array_map_recursive().

<?php
function array_map_recursive(callable $func, array $arr) {
    array_walk_recursive($arr, function(&$v) use ($func) {
        $v = $func($v);
    });
    return $arr;
}
?>
stijnleenknegt на gmail точка ком
пред 17 години
If you want to pass an argument like ENT_QUOTES to htmlentities, you can do the follow.

<?php
$array = array_map( 'htmlentities' , $array, array_fill(0 , count($array) , ENT_QUOTES) );
?>

The third argument creates an equal sized array of $array filled with the parameter you want to give with your callback function.
anonymous_user
пред 4 години
/** 
  * Function which recursively applies a callback to all values and also its
  * keys, and returns the resulting array copy with the updated keys and 
  * values.
  * PHP's built-in function array_walk_recursive() only applies the passed 
  * callback to the array values, not the keys, so this function simply applies
  * the callback to the keys too (hence the need of working with a copy, 
  * as also updating the keys would lead to reference loss of the original
  * array). I needed something like this, hence my idea of sharing it here.
  *
  * @param    callable    $func     callback which takes one parameter (value 
  *                                                   or key to be updated) and returns its 
  *                                                   updated value
  *
  * @param    array          $arr      array of which keys and values shall be 
  *                                                   get updated 
  */

function array_map_recursive(
    callable $func,
    array $arr
) {

      // Initiate copied array which will hold all updated keys + values
      $result = [];

      // Iterate through the key-value pairs of the array
      foreach ( $arr as $key => $value ) {

        // Apply the callback to the key to create the updated key value
        $updated_key = $func( $key );

        // If the iterated value is not an array, that means we have reached the
        // deepest array level for the iterated key, so in that case, assign
        // the updated value to the updated key value in the final output array
        if ( ! is_array( $value ) ) {

          $result[$updated_key] = $func( $value );

        } else {

          // If the iterated value is an array, call the function recursively,
          // By taking the currently iterated value as the $arr argument
          $result[$updated_key] = array_map_recursive(
            $func,
            $arr[$key]
          );

        }

      } // end of iteration through k-v pairs

      // And at the very end, return the generated result set
      return $result;

    } // end of array_map_recursive() function definition
Валф
3 години пред
A general solution for the problem of wanting to know the keys in the callback, and/or retain the key association in the returned array:

<?php

/**
 * Like array_map() but callback also gets passed the current key as the
 * first argument like so:
 * function($key, $val, ...$vals) { ... }
 * ...and returned array always maintains key association, even if multiple
 * array arguments are passed.
 */

function array_map_assoc(callable $callback, array $array, array ...$arrays) {
    $keys = array_keys($array);
    array_unshift($arrays, $keys, $array);
    return array_combine($keys, array_map($callback, ...$arrays));
}

?>

Because it uses array_map() directly, it behaves the same way in regard to ignoring the keys of subsequent array arguments. It also has the same variadic signature.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.