我有如下数组。
(
[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,以上代码正确吗?
有人可以帮助我吗?谢谢
答案 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);
答案 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
将返回true
或false
,如果找到了SKU
并具有state
值Yes