PHP выбирает массивы на основе значения в многомерном массиве

У меня есть массив с приведенной ниже структурой, и мне нужно выбрать максимальный уровень образования из подмассивов, которые выбрали => 1, чем больше [ключ], тем выше уровень образования.
в любом случае, сделать это с помощью встроенных в PHP функций массива?

             Array
(
[0] => Array
(
[key] => 0
[selected] => 1
[value] => Highschool diploma
)

[1] => Array
(
[key] => 1
[selected] => 0
[value] => Vocational training
)

[2] => Array
(
[key] => 2
[selected] => 0
[value] => College degree (Outside Quebec)
)

[3] => Array
(
[key] => 3
[selected] => 1
[value] => College degree (Quebec)
)

[4] => Array
(
[key] => 4
[selected] => 1
[value] => Baccalaureate
)

[5] => Array
(
[key] => 5
[selected] => 0
[value] => Masters degree
)

[6] => Array
(
[key] => 6
[selected] => 0
[value] => Doctorate
)

)

2

Решение

Конечно. Переберите каждый внутренний массив и сравните их значения с тем, который в данный момент является верхним. Например: https://eval.in/private/5c5a2ba8015119

$final = array();
foreach($array as $education) {
if($education['selected'] != 1) {
continue;
}

if(isset($final['key']) == FALSE
OR $education['key'] > $final['key']) {
$final = $education;
}
}

echo print_r($final, true);
0

Другие решения

PHP> = 5.5.0

Чтобы получить все выбранные ключи:

$keys = array_filter(array_column($array, 'selected'));

// or if there can be values other than 0 and 1
$keys = array_keys(array_column($array, 'selected'), '1');

Чтобы получить ключ с наибольшим значением:

$max = max(array_filter(array_column($array, 'selected')));

// or if there can be values other than 0 and 1
$max = max(array_keys(array_column($array, 'selected'), '1'));
0

Я создал тестовую функцию для вас.
Проверено и работает! Приветствия к бакалавриату!

<?php
// Demo Data
$your_array = array(
array(
'key'=>0,
'selected'=>1,
'value'=>'Highschool diploma'
),
array(
'key'=>1,
'selected'=>0,
'value'=>'Vocational training'
),
array(
'key'=>2,
'selected'=>0,
'value'=>'College degree (Outside Quebec)'
),
array(
'key'=>3,
'selected'=>1,
'value'=>'College degree (Quebec)'
),
array(
'key'=>4,
'selected'=>1,
'value'=>'Baccalaureate'
),
array(
'key'=>5,
'selected'=>0,
'value'=>'Masters degree'
),
array(
'key'=>6,
'selected'=>0,
'value'=>'Doctorate'
)
);

// Actual function
$array_count = (count($your_array)-1);
$highest_education = 'Nothing found.';
for($i=$array_count;$i>0;$i--)
{
if($your_array[$i]['selected']==1)
{
$highest_education = $your_array[$i]['value'];
break;
}
}

// Testing output
echo $highest_education;
?>
0

array_walk($data, function($el) use(&$ret) {
// or if (empty($ret) ...
if (!isset($ret) || ($el['selected'] >= 1 && $ret['key'] < $el['key']))
$ret = $el;
});

var_dump($ret);

Просто не забудьте сбросить или установить $ret = false; //null, etc..
если вы хотите запустить этот код несколько раз 🙂

0

Если вы хотите использовать встроенные PHP, array_reduce это, вероятно, путь. Нечто подобное должно сработать:

$result = array_reduce($theArray, function($state, $item) {
if($item['selected'] !== 1) return $state;
if($state === null) return $item;
if($item['key'] > $state['key']) return $item;
return $state;
});
echo $result['value'];

Обновить: Я должен отметить, что вышесказанное работает только в PHP 5.3 или новее, потому что он использует анонимные функции, которые не были доступны в более ранних версиях PHP. Если вы работаете с более ранней версией, вам действительно следует обновить ее. Но если вы не можете выполнить обновление, то вам придется определить часть функции как обычную автономную функцию, а затем передать имя вашей функции (в виде строки) во втором аргументе: array_reduce, Этот подход показан в примерах на странице документа для array_reduce,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector