Php 如何在特定条件下获取数组值

Php 如何在特定条件下获取数组值,php,arrays,Php,Arrays,我想要求根据得分键中的最大得分和单词键中的最小strlen来获取数组值,此示例数组: <?php $data = array( '0' => array('score' => '4','word' => 'titiek'), '1' => array('score' => '4','word' => 'titik'), '2' => array('score' => '4','word' => 'titie'), '3'

我想要求根据得分键中的最大得分和单词键中的最小strlen来获取数组值,此示例数组:

<?php
$data = array(
  '0' => array('score' => '4','word' => 'titiek'),
  '1' => array('score' => '4','word' => 'titik'),
  '2' => array('score' => '4','word' => 'titie'),
  '3' => array('score' => '3','word' => 'tuatuka'),
  '4' => array('score' => '3','word' => 'titiks'),
);
$result = //do something??
print_r($result);
?>

您可以使用
usort
得分
和字长对数组进行排序,然后您所需的结果将出现在
$data[0]
中。请注意,我们将相等的字长排列得更高,以便返回数组中最短长度中的第一个

usort($data, function($a, $b) {
    if ($a['score'] == $b['score'])
        return (strlen($a['word']) >= strlen($b['word'])) ? 1 : -1;
    else
        return $b['score'] - $a['score'];
});
print_r($data[0]);
另一种方法(不依赖于usort行为)是找到最大分数,然后处理数组,查找第一个最短的分数字符串:

$max_score = max(array_column($data, 'score'));
$minlength = PHP_INT_MAX;
foreach ($data as $key => $value) {
    if ($value['score'] != $max_score) continue;
    if (strlen($value['word']) < $minlength) {
        $minlength = strlen($value['word']);
        $index = $key;
    }
}
print_r($data[$index]);

以下是您可以找到它的方法:

$data = array(
  '0' => array('score' => '4','word' => 'titiek'),
  '1' => array('score' => '4','word' => 'titik'),
  '2' => array('score' => '4','word' => 'titie'),
  '3' => array('score' => '3','word' => 'tuatuka'),
  '4' => array('score' => '3','word' => 'titiks'),
);
$maxScore = 0; $minLen = 0;
foreach($data as $key => $arr) {
  $score = $arr['score'];
  $len = strlen($arr['word']);
  if($score > $maxScore) {
      $maxKey = $key;
      $minLen = $len;
      $maxScore = $score;
    } else if ($score == $maxScore && $len < $minLen) {
      $maxKey = $key;
      $minLen = $len;
    }
}
var_dump($data[$maxKey]);
$data=array(
“0”=>array('score'=>'4','word'=>'titiek'),
'1'=>数组('score'=>'4','word'=>'titik'),
“2”=>数组('score'=>'4','word'=>'titie'),
'3'=>数组('score'=>'3','word'=>'tuatuka'),
'4'=>数组('score'=>'3','word'=>'titiks'),
);
$maxScore=0$minLen=0;
foreach($key=>$arr的数据){
$score=$arr['score'];
$len=strlen($arr['word']);
如果($score>$maxScore){
$maxKey=$key;
$minLen=$len;
$maxScore=$score;
}否则如果($score==$maxScore&$len<$minLen){
$maxKey=$key;
$minLen=$len;
}
}
var_dump($data[$maxKey]);
我使用了var_dump来显示结果$data[$maxKey]是必需的结果。

您可以通过使用“>=”来使用和
Array ( 
    [score] => 4
    [word] => titik
)
$data = array(
  '0' => array('score' => '4','word' => 'titiek'),
  '1' => array('score' => '4','word' => 'titik'),
  '2' => array('score' => '4','word' => 'titie'),
  '3' => array('score' => '3','word' => 'tuatuka'),
  '4' => array('score' => '3','word' => 'titiks'),
);
$maxScore = 0; $minLen = 0;
foreach($data as $key => $arr) {
  $score = $arr['score'];
  $len = strlen($arr['word']);
  if($score > $maxScore) {
      $maxKey = $key;
      $minLen = $len;
      $maxScore = $score;
    } else if ($score == $maxScore && $len < $minLen) {
      $maxKey = $key;
      $minLen = $len;
    }
}
var_dump($data[$maxKey]);
$result = array_reduce($data, function ($previous, $current) {
  return $previous['score'] >= $current['score'] && strlen($previous['word']) <= strlen($current['word']) ? $previous : $current;
});

var_dump($result);