PHP array_filter()在条件数组上的条件

时间:2018-09-25 23:26:04

标签: php arrays

我拥有以下用户:

$allowed_users = array_filter($users, function($user) {
  return $user->age >= 20;
});
var_dump($allowed_users);

我想创建一个至少有20年历史的用户。我尝试过:

function SetCreateDate(STR_filename, posixdate)
% SetCreateDate(STR_filename, posixdate)
% STR_filename = 'C:\Data\my_testfile.dat'
% posixdate = posixtime(datetime('15-Sep-2018 16:00:01','InputFormat','dd-MMM-uuuu HH:mm:ss','TimeZone','America/New_York'))
filePath = strrep(STR_filename,'\','\\');
p = java.nio.file.Paths.get(filePath,javaArray('java.lang.String', 0));
filedate=posixdate*1000;    % filedate is in milli-seconds
java.nio.file.Files.setAttribute(p, "creationTime", java.nio.file.attribute.FileTime.fromMillis(filedate), javaArray('java.nio.file.LinkOption', 0));
%%%% Additional Filetime Attributes that can be set
%java.nio.file.Files.setAttribute(p, "lastAccessTime", java.nio.file.attribute.FileTime.fromMillis(filedate), javaArray('java.nio.file.LinkOption', 0));
%java.nio.file.Files.setAttribute(p, "lastModifiedTime", java.nio.file.attribute.FileTime.fromMillis(filedate), javaArray('java.nio.file.LinkOption', 0));

哪个返回一个空数组。我想我在回调函数上做错了。

4 个答案:

答案 0 :(得分:1)

您正在将对象表示法与数组一起使用。这是一个简单的解决方法:

$users = [
  ['name' => 'Alice', 'age' => 22],
  ['name' => 'Bob', 'age' => 23],
  ['name' => 'Charlie', 'age' => 19]
];

$allowed_users = array_filter($users, function($user) {
  return $user['age'] >= 20;
});
var_dump($allowed_users);

尽管这本身不是错误,但请在键中使用引号,否则解释器会发出通知。

答案 1 :(得分:1)

您需要使用数组语法访问数组成员,正在使用对象语法。

<?php
$users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 23],
    ['name' => 'Charlie', 'age' => 19]
];

$allowed_users = array_filter($users, function($user) {
    return ($user['age'] >= 20);
});

var_dump($allowed_users);

答案 2 :(得分:1)

首先,每个子用户数组的键都不用双引号或单引号引起来

$users = [
   ['name' => 'Alice', 'age' => 22],
   ['name' => 'Bob', 'age' => 23],
   ['name' => 'Charlie', 'age' => 19]
];

并且您必须使用括号$users[1]['name']中的键访问每个子阵列键,以返回第一个子阵列中的第一个用户的名称

$allowed_users = array_filter($users, function($user) {
  return $user['age'] >= 20;
});

答案 3 :(得分:0)

您可以使用以下代码:

function onStart(){
    $users = [
      ['name' => 'Alice', 'age' => 22],
      ['name' => 'Bob', 'age' => 23],
      ['name' => 'Charlie', 'age' => 19]
    ];

    $allowed_users = array_filter($users, function($user) {
      return $user['age'] >= 20;
    });
    var_dump($allowed_users);

}