это возможно, если обратный вызов в array_filter получить параметр?

Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java

Когда вы проверяете (сравниваете) два объекта с помощью оператора ==, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true, в противном случае false. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals.

equals - фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.

Example:
    stringObjectOne.equals(stringObjectTwo);

Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.

Давайте посмотрим:

String one   = "HELLO"; 
String two   = "HELLO"; 
String three = new String("HELLO"); 
String four  = "hello"; 

one == two;   // TRUE
one == three; // FALSE
one == four;  // FALSE

one.equals(two);            // TRUE
one.equals(three);          // TRUE
one.equals(four);           // FALSE
one.equalsIgnoreCase(four); // TRUE

13
задан justjoe 5 November 2012 в 11:56
поделиться

3 ответа

Вы можете создать замыкание на PHP ≥5.3.

array_filter($files, function($array) use ($key) {
  return is_inarr_key($array, $key); 
} );

Если вы застряли на PHP <5.3,…

Вы можете сделать $ key глобальной переменной.

function is_inarr_with_global_key($array) {
   global $key;
   ....
}

Вы можете создать класс

class KeyFilter {
  function KeyFilter($key) { $this->key = $key; }
  function is_inarr_key($array) { ... }
}
...
array_filter($files, array(new KeyFilter('name'), 'is_inarr_key'));

Вы можете создать 3 разные функции

array_filter($files, 'is_inarr_name');
array_filter($files, 'is_inarr_path');
array_filter($files, 'is_inarr_number');

Вы можете написать свой собственный array_filter

function my_array_filter($files, $key) {
  ...
}
42
ответ дан 1 December 2019 в 17:47
поделиться

Я не знаю, можете ли вы предоставить функцию обратного вызова с параметрами, но в качестве предложения вы можете определить функцию обратного вызова для array_filter

array_filter($files, "is_inarr_key");

И чтобы получить имя массива, просто переберите $ file [] и получите имя . Затем, имея имя , вы можете продолжить свою логику.

HTH.

1
ответ дан 1 December 2019 в 17:47
поделиться

Вы можете использовать функцию array_walk как:

$arr = array(
        array("name" => "Jack", "id" => 1),
        array("name" => "Rose", "id" => 2),
    );

$result = array(); // initialize result array.
array_walk($arr, "filter"); // iterate over the array calling filter fun for each value.
// $result will now have elements "Jack" and "Rose"

function filter($a) {

    global $result; // to access the global result array.

    $result[] = $a['name']; // for each array passed, save the value for the key 'name' in the result array.
}
2
ответ дан 1 December 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: