Php 如何在特定条件下获取数组值
我想要求根据得分键中的最大得分和单词键中的最小strlen来获取数组值,此示例数组: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'
<?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);