代码之家  ›  专栏  ›  技术社区  ›  Sanjok Gurung

php检查数组是否以特定的值开始并以特定的值结束,

  •  0
  • Sanjok Gurung  · 技术社区  · 6 年前

    是否有一种干净优雅的方法来检查数组对象值是否具有特定值“positionid=string(29)”,以及其“action”是否以“eg”(string)1”开头,以“(string)0”结尾。

    未打开的数组与此类似

    array (
       [0] => Object1 {
                ['PositionID'] => (string) 29
                ['Action'] => (string) 1
              }
       [1] => Object22 {
                ['PositionID'] => (string) 30
                ['Action'] => (string) 0
              }
       [2] => Object23 {
                ['PositionID'] => (string) 29
                ['Action'] => (string) 1
              }
    
       [3] => Object5 {
                ['PositionID'] => (string) 31
                ['Action'] => (string) 0
              }
       [2] => Object23 {
                ['PositionID'] => (string) 29
                ['Action'] => (string) 0
              }
    );
    

    我想知道在这个数组中,“positionid=29”的最后一个“action”是0或其他什么。目前,我正在将positionID分组,并将它们存储到第三个数组中,然后循环使用,这对我来说就像是一个肮脏的解决方案。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Loek    6 年前

    看看 end() . 第一项应该是显而易见的。

    $first = $array[0];
    if ($first->positionId === '29' && $first->Action === '1') {
        $last = end($array);
        if ($last->positionId === '29' && $last->Action === '0' {
            // Stuff
        }
    }
    
        2
  •  0
  •   Progrock    6 年前
    <?php
    
    $items = 
    [
        [
            'position' => '17',
            'action' => '1'
        ],
        [
            'position' => '47',
            'action' => '0'
        ],
        [
            'position' => '23',
            'action' => '0'
        ]
    ];
    
    foreach ($items as $k => $item)
        $items[$k] = (object) $item;
    
    var_dump($items);
    
    if(array_column($items, 'action', 'position')[23] === '0')
        echo "Action is '0' for the object with position 23";
    

    输出:

    array(3) {
        [0]=>
        object(stdClass)#1 (2) {
          ["position"]=>
          string(2) "17"
          ["action"]=>
          string(1) "1"
        }
        [1]=>
        object(stdClass)#2 (2) {
          ["position"]=>
          string(2) "47"
          ["action"]=>
          string(1) "0"
        }
        [2]=>
        object(stdClass)#3 (2) {
          ["position"]=>
          string(2) "23"
          ["action"]=>
          string(1) "0"
        }
      }
      Action is '0' for the object with position 23
    
        3
  •  0
  •   The fourth bird    6 年前

    你可以结合使用 array_column array_filter 你呢? end 从数组返回最后一项 $result :

    $result = array_column(array_filter($arrays, function ($x) {
        return $x->PositionID === '29';
    }), 'Action');
    $lastValue = end($result);
    var_dump($lastValue);
    

    那会给你:

    string(1) "0"
    

    然后你可以像这样使用它:

    if ($lastValue === "0") {
        // ...
    }