#php #arrays #extract
#php #массивы #извлечь
Вопрос:
У меня есть массив, подобный этому:
array (0 =>
array (
'id' => '20110209172713',
'Date' => '2011-02-09',
'Weight' => '200',
),
1 =>
array (
'id' => '20110209172747',
'Date' => '2011-02-09',
'Weight' => '180',
),
2 =>
array (
'id' => '20110209172827',
'Date' => '2011-02-09',
'Weight' => '175',
),
3 =>
array (
'id' => '20110211204433',
'Date' => '2011-02-11',
'Weight' => '195',
),
)
Мне нужно извлечь минимальные и максимальные значения веса.
В этом примере
$min_value = 175
$max_value = 200
Любая помощь о том, как это сделать? Спасибо!
Комментарии:
1. Я начинаю думать, что PHP нужен новый позиционный оператор со всеми недавними вопросами, касающимися «прямого» доступа к индексам двумерного массива…
2.
array_pluck
иarray_column
были предложены (как и 7 лет назад). Я не ожидаю ничего подобного в ближайшее время. И еще одно здесь.
Ответ №1:
Вариант 1.Сначала вы сопоставляете массив, чтобы получить эти числа (а не полную информацию):
$numbers = array_column($array, 'weight')
Затем вы получаете минимальное и максимальное:
$min = min($numbers);
$max = max($numbers);
Вариант 2. (Только если у вас нет PHP 5.5 или лучше) То же, что и вариант 1, но для извлечения значений используйте array_map
:
$numbers = array_map(function($details) {
return $details['Weight'];
}, $array);
Вариант 3.
Вариант 4. Если вам нужно только минимальное или максимальное значение, array_reduce()
может быть быстрее:
$min = array_reduce($array, function($min, $details) {
return min($min, $details['weight']);
}, PHP_INT_MAX);
Это делает больше min()
секунд, но они очень быстрые. PHP_INT_MAX
Нужно начинать с высокого значения и опускаться все ниже и ниже. Вы могли бы сделать то же самое для $max
, но вы бы начали с 0
или -PHP_INT_MAX
.
Ответ №2:
foreach ($array as $k => $v) {
$tArray[$k] = $v['Weight'];
}
$min_value = min($tArray);
$max_value = max($tArray);
Ответ №3:
Для людей, использующих PHP 5.5 , это может быть сделано намного проще с помощью array_column. Больше не нужны эти уродливые array_maps.
Как получить максимальное значение:
$highest_weight = max(array_column($details, 'Weight'));
Как получить минимальное значение
$lowest_weight = min(array_column($details, 'Weight'));
Ответ №4:
Интересно отметить, что оба вышеуказанных решения используют дополнительное хранилище в виде массивов (первое из них два, а второе использует один массив), а затем вы находите минимальное и максимальное значения, используя массив «extra storage». Хотя это может быть приемлемо в реальном мире программирования (кто расскажет о «дополнительном» хранилище?) это дало бы вам «C» по программированию 101.
Проблема нахождения минимального и максимального значений может быть легко решена с помощью всего двух дополнительных слотов памяти
$first = intval($input[0]['Weight']);
$min = $first ;
$max = $first ;
foreach($input as $data) {
$weight = intval($data['Weight']);
if($weight <= $min ) {
$min = $weight ;
}
if($weight > $max ) {
$max = $weight ;
}
}
echo " min = $min and max = $max n " ;
Комментарии:
1. Возможно, вы захотите заменить
if($weight > $max ) {
наif($weight >= $max ) {
, чтобы гарантировать, что$max
всегда будет$weight
.
Ответ №5:
Как насчет того, чтобы не использовать предопределенные функции, такие как min
или max
?
//find max
$arr = [4,5,6,1];
$val = $arr[0];
$n = count($arr);
for($i=0;$i<$n;$i ) {
if($val < $arr[$i]) {
$val = $arr[$i];
}
}
echo $val;
//find min
$arr = [4,5,6,1];
$val = $arr[0];
$n = count($arr);
for($i=0;$i<$n;$i ) {
if($val > $arr[$i]) {
$val = $arr[$i];
}
}
echo $val;
Ответ №6:
$num = array (0 => array ('id' => '20110209172713', 'Date' => '2011-02-09', 'Weight' => '200'),
1 => array ('id' => '20110209172747', 'Date' => '2011-02-09', 'Weight' => '180'),
2 => array ('id' => '20110209172827', 'Date' => '2011-02-09', 'Weight' => '175'),
3 => array ('id' => '20110211204433', 'Date' => '2011-02-11', 'Weight' => '195'));
foreach($num as $key => $val)
{
$weight[] = $val['Weight'];
}
echo max($weight);
echo min($weight);
Ответ №7:
<?php
$array = array (0 =>
array (
'id' => '20110209172713',
'Date' => '2011-02-09',
'Weight' => '200',
),
1 =>
array (
'id' => '20110209172747',
'Date' => '2011-02-09',
'Weight' => '180',
),
2 =>
array (
'id' => '20110209172827',
'Date' => '2011-02-09',
'Weight' => '175',
),
3 =>
array (
'id' => '20110211204433',
'Date' => '2011-02-11',
'Weight' => '195',
),
);
foreach ($array as $key => $value) {
$result[$key] = $value['Weight'];
}
$min = min($result);
$max = max($result);
echo " The array in Minnumum number :".$min."<br/>";
echo " The array in Maximum number :".$max."<br/>";
?>
Ответ №8:
$Location_Category_array = array(5,50,7,6,1,7,7,30,50,50,50,40,50,9,9,11,2,2,2,2,2,11,21,21,1,12,1,5);
asort($Location_Category_array);
$count=array_count_values($Location_Category_array);//Counts the values in the array, returns associatve array
print_r($count);
$maxsize = 0;
$maxvalue = 0;
foreach($count as $a=>$y){
echo "<br/>".$a."=".$y;
if($y>=$maxvalue){
$maxvalue = $y;
if($a>$maxsize){
$maxsize = $a;
}
}
}
echo "<br/>max = ".$maxsize;
Комментарии:
1. Это не представляет многомерные данные запрашивающего.
Ответ №9:
быстро вывести пять максимальных и минимальных чисел из массива без использования массива сортировки в php :-
<?php
$array = explode(',',"78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73,
68, 72, 73, 75, 65, 74, 63, 67, 65, 64, 68, 73, 75, 79, 73");
$t=0;
$l=count($array);
foreach($array as $v)
{
$t = $v;
}
$avg= $t/$l;
echo "average Temperature is : ".$avg." ";
echo "<br>List of seven highest temperatsures :-";
$m[0]= max($array);
for($i=1; $i <7 ; $i )
{
$m[$i]=max(array_diff($array,$m));
}
foreach ($m as $key => $value) {
echo " ".$value;
}
echo "<br> List of seven lowest temperatures : ";
$mi[0]= min($array);
for($i=1; $i <7 ; $i )
{
$mi[$i]=min(array_diff($array,$mi));
}
foreach ($mi as $key => $value) {
echo " ".$value;
}
?>
Комментарии:
1. Это не представляет многомерные данные запрашивающего.