PHP - 从multidimentional对象数组中检索min()对象

Gar*_*bit 1 php arrays object multidimensional-array

**编辑**如果我只使用数组会发生什么,例如

array(array('name'=>'bla','distance'=>'123'); array('name'=>'b123a','distance'=>'1234214'););

这会更容易找到最小值吗?

嗨,我正在尝试从一个对象数组中检索距离值最小的对象.这是我的数据集;

    [0] => myObjectThing Object
        (
            [name:myObjectThing:private] => asadasd
            [distance:myObjectThinge:private] => 0.9826368952306
        )

    [1] => myObjectThing Object
        (
            [name:myObjectThing:private] => 214gerwert24
            [distance:myObjectThinge:private] => 1.5212312547306
        )

    [2] => myObjectThing Object
        (
            [name:myObjectThing:private] => abc123
            [distance:myObjectThinge:private] => 0.0000368952306
        )
Run Code Online (Sandbox Code Playgroud)

所以我希望能够解除距离值最小的物体.在这种情况下,它将是名称为abc123的对象

Rob*_*itt 9

嗯,PHP> = 5.3我会尝试这样的事情:

$Object = array_reduce($data,function($A,$B){
    return $A->distance < $B->distance ? $A : $B;
})
Run Code Online (Sandbox Code Playgroud)

对于PHP <5.3,填充就足够了:

function user_defined_reduce($A,$B){
    return $A->distance < $B->distance ? $A : $B;
}
$Object = array_reduce($data,"user_defined_reduce");
Run Code Online (Sandbox Code Playgroud)


mau*_*its 5

以前建议的答案没有解释需要包含一个$initial值 to array_reduce()。解决方案因此不起作用。

这个对我有用(PHP 5.3.13):

$array = array(
    array(
        'name' => 'something',
        'value' => 56
    ),
    array(
        'name' => 'else',
        'value' => 54
    ),
    array(
        'name' => 'else',
        'value' => 58
    ),
    array(
        'name' => 'else',
        'value' => 78
    )
);
$object = array_reduce($array, function($a, $b){
    return $a['value'] < $b['value'] ? $a : $b;
}, array_shift($array));

print_r($object);
Run Code Online (Sandbox Code Playgroud)

这会给我:

[0] => Array
(
    [name] => else
    [value] => 54
)
Run Code Online (Sandbox Code Playgroud)

而以前的解决方案给了我null. 我假设 PHP < 5.3 需要为array_reduce().