PHP проверяет, начинается ли массив с определенного значения и заканчивается конкретным значением, - PullRequest
0 голосов
/ 07 июня 2018

Существует ли чистый элегантный способ проверить, имеет ли значение объекта массива конкретное значение "positionID = string (29)" и начинается ли его "Action", например, для "(string) 1", и заканчивается "(string)) 0 ".

Массив unlooped выглядит примерно так:

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
          }
);

Я хотел бы выяснить в этом массиве, что последнее вхождение "Action" в "positionID = 29" равно 0 или что-то еще.На данный момент я группирую positionId и сохраняю их в третий массив и зацикливаю его, что кажется мне грязным решением.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
<?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
0 голосов
/ 07 июня 2018

Вы можете использовать комбинацию 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") {
    // ...
}
0 голосов
/ 07 июня 2018

Взгляните на end().Первый пункт должен быть очевидным.

$first = $array[0];
if ($first->positionId === '29' && $first->Action === '1') {
    $last = end($array);
    if ($last->positionId === '29' && $last->Action === '0' {
        // Stuff
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...