Проверьте любое совпадение в массиве php - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть массив, как показано ниже.

(
[TestData1] => Array
    (
        [0] => Array
            (
                [SKU] => A01
                [SKUType] => Test
                [State] => Yes

            )

        [1] => Array
            (
               [SKU] => A02
               [SKUType] => Test
               [State] => Yes

            )

        [2] => Array
            (
               [SKU] => A01
               [SKUType] => Test
               [State] => Yes

            )

        [3] => Array
            (
               [SKU] => A03
               [SKUType] => Test
               [State] => Yes

            )

    )

[TestData2] => Array
    (
    )

[TestData3] => Array
    (
    )

 )

Мне нужно проверить, существует ли данный SKU в массиве TestData1.

Если существует, необходимо проверить значение State, которое должно быть Да.

Примером данного sku является

   $skutotest = 'A01';

Как определить, присутствует ли значение в указанном выше массиве с использованием PHP.

Сейчас я попробовал, как показано ниже.

$Details = result_array; // here reading array data from api
$parent_sku = A01;
$Results = $Details['$TestData1'];
    foreach($Results as $res){
        $sku= $res['SKU'];
        $state = $res['State'];
        if($sku== $parent_sku && $state == "Yes"){
            return true;
            break;
        }else{
            return false;
         }
    }

Как только я обнаружил совпадение, нужно прекратить выполнение и вернуть true, правильный ли код приведен выше?

Может ли кто-нибудь помочь мне с этим. Спасибо

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Отметьте этот лайнер,

$exists = false;
$key    = "TestData1";
$skutotest    = "A01";
if (array_key_exists($key, $arr)) { // for check if key exists
    return ($arr[$key][array_search($skutotest, array_column($arr[$key], 'SKU'))]['State'] == 'Yes');
}

array_search - Выполняет поиск в массиве заданного значения и возвращает первый соответствующий ключ в случае успеха
array_column - вернуть значения из одного столбца во входном массиве

Демо .

EDIT

Правильное решение вашей проблемы,

$exists = false;
$key    = "TestData1";
$val    = "A01";
if (array_key_exists($key, $arr)) {
    array_walk($arr[$key], function ($item) use ($val, &$exists) {
        if ($item['SKU'] == $val && $item['State'] == 'Yes') {
            $exists = true;
            return;
        }
    });
}
return ($exists);

Демо

0 голосов
/ 30 апреля 2019

Следующая функция была использована в решении:

array_combine () - Создает массив, используя один массив для ключей и другой для его значений

array_column () - вернуть значения из одного столбца во входном массиве

array_key_exists () - Проверяет, существует ли данный ключ или индекс в массиве

$skuToSearch  = 'A01';
$parentKey    = 'TestData1';
$res = array_combine(
        array_column($arr[$parentKey] , 'SKU'), 
        array_column($arr[$parentKey] , 'State')
     );
$found = (array_key_exists($skuToSearch, $res)  && $res[$skuToSearch] == 'Yes') ? true : false;

Пояснение:

  • переменная $skuToSearch, введите SKU, который вы хотите найти.
  • переменная $parentKey содержит key родительского подмассива.
  • array_column($arr[$parentKey] , 'SKU') вернет массив с SKU's
  • array_column($arr[$parentKey] , 'State') вернет массив с States
  • Переменная $found вернет true ИЛИ false, если SKU найдены и имеют state значения Yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...