使用指定范围内的键获取数组值 - PHP 5.5

时间:2017-02-02 15:41:18

标签: php arrays php-5.5

在任意顺序和键的数组中,如下所示

var $window = $(window);

// creates an attribute called data-content for each image and stores it's src
$(".logo-wrap img").each(function() {
  $(this).data('data-content', $(this).attr('src'));
});

function checkWidth() {
    var windowsize = $window.width();
    if (windowsize < 601) {
        $(".logo-wrap img").attr("src","#");
    }
    else {
      // changes each image's src to the link stored in data-content attribute
      $(".logo-wrap img").each(function() {
        $(this).attr("src", $(this).data('data-content'));
      });
    }
}
// Execute on load
checkWidth();
// Bind event listener
$(window).resize(checkWidth);

如何通过键范围获取数组的一部分,例如,每个项目的键数在5到40之间

$myArray = array( 1 => 'foo', 4 => 'bar', 6 => 'foobar', 24 => 'barfoo', 30 => 'fizz', 35 => 'buzz', 50 => 'fizzbuzz' );

这样的东西

预期输出:array_range($myArray, 5, 40);

这与How to use array_filter() to filter array keys?类似,但在这种情况下,我被限制为PHP 5.5。

3 个答案:

答案 0 :(得分:3)

定义数组中的一系列键,然后计算键的交集:

$range  = array_flip(range(5, 40));
$result = array_intersect_key($myArray, $range);

一个班轮:

$result = array_intersect_key($myArray, array_flip(range(5, 40)));

可选择填充范围数组(我只想到另一个,然后它更短):

$range = array_fill_keys(range(5, 40), 1);

如果你想要特定的键而不是范围,只需定义一个键或值数组并翻转:

$range = array_flip(array(6, 24, 50));
//or
$range = array(6=>1, 24=>1, 50=>1);

答案 1 :(得分:2)

如果PHP版本低于5.6,升级您的PHP版本 - 5.5 is not even supported any longer。如果您无法升级PHP,那么显然可以使用AbraCadaver's answer

这需要PHP 5.6+,但在问题中澄清PHP版本之前已经得到了解答,因此我将留待参考。

使用array_filter - 只要PHP版本高于5.6:

$allowed_range = [ 'min' => 5, 'max' => 40 ];
$filtered = array_filter(
    $myArray,
    function ( $key ) use ( $allowed_ranged ) {
        return ( $key >= $allowed_range[ 'min' ] && $key <= $allowed_range[ 'max' ] );
    },
    ARRAY_FILTER_USE_KEY
);

答案 2 :(得分:1)

只需迭代数组,并使用条件构建过滤数组(此处假设包含范围):

<?php
$in = array(
    1  => 'foo',
    4  => 'bar',
    6  => 'foobar',
    24 => 'barfoo',
    30 => 'fizz',
    35 => 'buzz',
    50 => 'fizzbuzz'
);

$out = [];
foreach($in as $k => $v)
{
    if($k >= 5 && $k <= 40) {
        $out[$k] = $v;
    }
}
var_dump($out);

输出:

array (size=4)
  6 => string 'foobar' (length=6)
  24 => string 'barfoo' (length=6)
  30 => string 'fizz' (length=4)
  35 => string 'buzz' (length=4)