我有两个数组,一个包含一个名称列表(数组名称= canNAMES
),
["name 1","name 2","name 3"];
第一个数组中包含大约70个值,而我的第二个数组中包含大约600个对象(数组名称= {data
),
[
{
"agency": "test agency",
"work_end": "21-Oct",
"contractor": "name n",
"rate": "£30.00",
"hours": 32,
"exp": null,
"net": "£960.00",
"vat": "£192.00",
"gross": "£1,152.00"
},
{
"agency": "test agency",
"work_end": "21-Oct",
"contractor": "name n",
"rate": "£25.00",
"hours": 30,
"exp": null,
"net": "£750.00",
"vat": "£150.00",
"gross": "£900.00"
}
]
我正在尝试使用php in_array
函数来获取具有第一个数组中列出的名称的对象。
当我按以下方式使用它时,我可以获得所需的结果,但它最多只能读取70条记录
foreach ($canNAMES as $index => $row) {
if (in_array($row, (array) $data[$index]["contractor"])) {
$MAIN[] = $data[$index];
}
}
上面的代码是我遍历具有70条记录的第一个数组(canNAMES数组)的地方。当我尝试遍历第二个数组(数据数组)时,由于第一个数组的索引不超过69,我得到了未定义的偏移量错误。
我的问题是如何解决此问题,是否有更好的方法来做我正在尝试的事情。
谢谢
答案 0 :(得分:1)
如果名称不是唯一的,那么您可以轻松地遍历每组匹配另一组的数据...
hasAuthority(String authority)
答案 1 :(得分:1)
我想您希望data
数组中所有具有canNAMES
数组中存在的名称的元素。
请考虑以下内容:
$canNAMES = ["ccc","bbb","eee"];
$data = json_decode('[{"id":1, "contractor": "aaa"}, {"id":2, "contractor": "ddd"}, {"id":3, "contractor": "ccc"}, {"id":4, "contractor": "bbb"}]');
$res = array();
foreach($data as $elem) {
if (in_array($elem->contractor, $canNAMES))
$res[] = $elem;
}
echo print_r($res);
return;