检查数组php中的任何一项

时间:2019-04-30 14:14:58

标签: php arrays multidimensional-array

我有如下数组。

(
[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
    (
    )

 )

我需要检查TestData1数组中是否存在给定的SKU。

如果存在,则需要检查State值,该值为Yes。

给出的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 个答案:

答案 0 :(得分:2)

检查这支内胆,

$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 —从输入数组的单个列中返回值

Demo

编辑

针对您的问题的正确解决方案,

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

Demo

答案 1 :(得分:0)

以下功能已在解决方案中使用:

  

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将返回truefalse,如果找到了SKU并具有stateYes