есть многомерный массив вида
[0] => Array
(
[book] => 78
[vol] => 41
[element] => 1
)
[1] => Array
(
[book] => 78
[vol] => 59
[element] => 0
)
[2] => Array
(
[book] => 64
[vol] => 3
[element] => 4
)
[3] => Array
(
[book] => 64
[vol] => 11
[element] => 3
)
Как мне найти второй элемент массива? тоесть элемент, где больше book, но меньше vol
Имеем массив:
$arr = [
['book' => 78, 'vol' => 41, 'element' => 1],
['book' => 78, 'vol' => 59, 'element' => 0],
['book' => 64, 'vol' => 3, 'element' => 4],
['book' => 64, 'vol' => 11, 'element' => 3]
];
И делаем, как вариант, следующую реализацию:
foreach ($arr as $val)
{
$key = $val['book'] > $val['vol']
? $val['book'] - $val['vol'] : $val['vol'] - $val['book'];
$res[$key] = $val;
}
krsort($res);
$result = array_shift($res);
print_r($result);
В результате получаем нужные данные:
Array
(
[book] => 64
[vol] => 3
[element] => 4
)
Ваше условие не совсем точное. Дело в том, что наибольшее количество книг может быть у одного элемента, а наименьшее количество скачиваний у другого. Поэтому вам надо придумать значение, которое выражает ваш замысел. Таким значением может быть, например, book/vol (чем больше книг и меньше скачиваний, тем больше это значение). Дело за малым, обойдите массив и выберите элемент с максимальным значением:
$maxVal = null;
$id = null;
foreach($arr as $key => $item) {
$val = $item['book'] / ($item['vol'] + 1); // +1 чтобы не делить на 0
if ($maxVal === null || $val > $maxVal) {
$id = $key;
$maxVal = $val;
}
}
var_dump($arr[$id]);
Как вариант:
foreach ($array as $item){
$arrayNew[] = $item['vol'];
}
$minVol = min($arrayNew);
foreach ($array as $item){
if ($item['vol'] == $minVol){
$arrayNewBook[] = $item['book'];
}
}
$maxBook = max($arrayNewBook);
foreach ($array as $item){
if ($item['vol'] == $minVol and $item['book'] == $maxBook) {
var_dump($item);
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости