如何从任何关联数组中获取第一个出现的非零键值对

时间:2018-02-06 06:13:15

标签: php arrays

我有一个关联数组:

$pair = array(
  'S'=>'0',
  'I'=>'50',
  'P'=>'30'
);

从这对键和值中,我需要首先从键值对出现非零值, 从我的示例中,我期待键I和值50

3 个答案:

答案 0 :(得分:0)

做这样的事情:

function findNonZero($var){
    // returns whether the input is non zero
    return($var > 0);
}

$pair = array(
    'S'=>'0',
    'I'=>'50',
    'P'=>'30'
);

$newPair = array_filter($pair, "findNonZero");
var_dump($newPair); //Contains array of non-zero values

答案 1 :(得分:0)

你可以用通常的foreach循环来做到这一点

$pair = array(
  'S'=>'0',
  'I'=>'50',
  'P'=>'30'
);


foreach($pair as $k=>$v)  {
   if ($v) break;
}
echo "$k => $v"; // I => 50

demo

答案 2 :(得分:0)

您可以使用php函数array_filter()array_slice()或使用foreach循环。

<?php
// filter out empty values, and get first item
$value = array_slice(array_filter($pair), 0, 1);

// check not empty
if (!empty($value)) {
    // get key
    echo 'key   => '.array_keys($value)[0].PHP_EOL;

    // get value
    echo 'value => '.array_values($value)[0];
}

https://3v4l.org/tr3bp

<强>结果:

key   => I
value => 50

或使用循环:

<?php
$value = [];
foreach ($pair as $k => $v) {
    if (!empty($v)) {
        $value[$k] = $v;
        break;
    }
}

if (!empty($value)) {
    echo 'key   => '.array_keys($value)[0].PHP_EOL;
    echo 'value => '.array_values($value)[0];
}

https://3v4l.org/tPeAq

<强>结果:

key   => I
value => 50

或使用generator

<?php
$getNoneEmpty = function() use ($pair) {
    foreach ($pair as $key => $value) {
        if (!empty($value)) {
            yield [$key => $value];
        }
    }
};

// get first
$value = $getNoneEmpty()->current();

if (!empty($value)) {
    echo 'key   => '.array_keys($value)[0].PHP_EOL;
    echo 'value => '.array_values($value)[0].PHP_EOL;
}

// or loop over all
foreach ($getNoneEmpty() as $value) {
    echo 'key   => '.array_keys($value)[0].PHP_EOL;
    echo 'value => '.array_values($value)[0].PHP_EOL;
}

https://3v4l.org/mnnHl

<强>结果:

key   => I
value => 50
key   => I
value => 50
key   => P
value => 30

如果您不想要键/值,也可以采用不同的方式对猫进行皮肤处理。