2014-09-29 85 views
1

我有一个具有以下结构的数组,我需要从已选择的子数组中选择最大教育级别=> 1,[key]越大教育程度。 无论如何用PHP内置数组函数做到这一点?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 
          ) 

        ) 

回答

0

当然。循环遍历每个内部数组,并检查它们的值与当前顶部的数值。例如: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
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.. 如果你想如果你想使用PHP的内置插件多次:)

0

运行这段代码,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的工作或更高版本,因为它使用anonymous functions,这是不是在早期版本的PHP可用。如果你使用的是早期版本,你应该升级。但是如果你不能升级,那么你必须将函数部分定义为一个普通的独立函数,然后将第二个参数中的函数名称(作为字符串)传递给array_reduce。该方法显示在array_reduce的文档页面的示例中。

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; 
?>