Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数组通过具有不同索引的两个数组循环_Php_Arrays_Loops - Fatal编程技术网

php数组通过具有不同索引的两个数组循环

php数组通过具有不同索引的两个数组循环,php,arrays,loops,Php,Arrays,Loops,我有两个数组,一个包含名称列表(数组名称=canNAMES) 第一个数组中大约有70个值,我的第二个数组中大约有600个对象(数组名=数据) 我试图使用phpin_array函数来获取第一个数组中列出的名称的对象 当我按如下方式使用它时,我能够得到所需的结果,但它最多只能读取70条记录 foreach ($canNAMES as $index => $row) { if (in_array($row, (array) $data[$index]["contractor"])) {

我有两个数组,一个包含名称列表(数组名称=
canNAMES

第一个数组中大约有70个值,我的第二个数组中大约有600个对象(数组名=
数据

我试图使用php
in_array
函数来获取第一个数组中列出的名称的对象

当我按如下方式使用它时,我能够得到所需的结果,但它最多只能读取70条记录

foreach ($canNAMES as $index => $row) {
    if (in_array($row, (array) $data[$index]["contractor"])) {
        $MAIN[] = $data[$index];
    }
}
上面的代码是我循环遍历第一个数组(canNAMES数组)的地方,该数组有70条记录。当我尝试循环第二个数组(数据数组)时,我得到一个未定义的偏移量错误,因为第一个数组的索引不高于69

我的问题是如何解决这个问题,是否有更好的方法来做我正在尝试的事情


谢谢

如果名称不是唯一的,那么您可以轻松地循环遍历每一组数据,将一个数据与另一个数据进行匹配

$canNAMES = ["name 1","name 2","name 3"];

$data = json_decode ('[
{
    "agency": "test agency",
    "work_end": "21-Oct",
    "contractor": "name 3",
    "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 1",
    "rate": "£25.00",
    "hours": 30,
    "exp": null,
    "net": "£750.00",
    "vat": "£150.00",
    "gross": "£900.00"
}
]');

foreach ( $canNAMES as $name )  {
    foreach ( $data as $entry ) {
        if ( $name == $entry->contractor )    {
            print_r($entry);
        }
    }
}

如果名称不是唯一的,那么您可以轻松地循环遍历每一组数据,将一个数据与另一个数据进行匹配

$canNAMES = ["name 1","name 2","name 3"];

$data = json_decode ('[
{
    "agency": "test agency",
    "work_end": "21-Oct",
    "contractor": "name 3",
    "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 1",
    "rate": "£25.00",
    "hours": 30,
    "exp": null,
    "net": "£750.00",
    "vat": "£150.00",
    "gross": "£900.00"
}
]');

foreach ( $canNAMES as $name )  {
    foreach ( $data as $entry ) {
        if ( $name == $entry->contractor )    {
            print_r($entry);
        }
    }
}

我想您需要
数据
数组中的所有元素,这些元素的名称都存在于
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;

我想您需要
数据
数组中的所有元素,这些元素的名称都存在于
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;

array\u in
-你的意思是
in\u array
?你是否尝试过使用
$data
数组并检查
$canNAMES
?@litilion-yah它不工作
array\u in
-你的意思是
in\u array
?你是否尝试过使用
$data
数组并检查
$canNAMES
?@litilion-yah它不工作我认为使用'in_array'是更好的可读性(如在我的帖子中)-但它和这个一样…我认为使用'in_array'是更好的可读性(如在我的帖子中)-但它和这个一样…这实际上是更好的方法,保存两次扫描。这实际上是更好的方法,保存两次扫描。