Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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 - Fatal编程技术网

如何在php多维中搜索键值并返回仅包含搜索值的数组

如何在php多维中搜索键值并返回仅包含搜索值的数组,php,arrays,Php,Arrays,我有以下数组 Array ( [0] => Array ( [program] => 615 [program_title_override] => [campuses] => Array ( [0] => Array (

我有以下数组

Array
(
    [0] => Array
        (
            [program] => 615
            [program_title_override] => 
            [campuses] => Array
                (
                    [0] => Array
                        (
                            [campus] => 572
                            [campus_title_override] => New Jersey - Moorestown
                        )

                )

        )

    [1] => Array
        (
            [program] => 313
            [program_title_override] => 
            [campuses] => Array
                (
                    [0] => Array
                        (
                            [campus] => 267
                            [campus_title_override] => Colorado - Denver
                        )

                    [1] => Array
                        (
                            [campus] => 269
                            [campus_title_override] => Connecticut - East Windsor
                        )

                    [2] => Array
                        (
                            [campus] => 277
                            [campus_title_override] => Illinois - Melrose Park (Chicago Area)
                        )

                    [3] => Array
                        (
                            [campus] => 279
                            [campus_title_override] => Indiana - Indianapolis
                        )

                    [4] => Array
                        (
                            [campus] => 281
                            [campus_title_override] => Maryland - Columbia
                        )

                    [5] => Array
                        (
                            [campus] => 570
                            [campus_title_override] => New Jersey  - Mahwah (Bergen County/NY Metro Area)
                        )

                    [6] => Array
                        (
                            [campus] => 580
                            [campus_title_override] => New Jersey - Union
                        )

                    [7] => Array
                        (
                            [campus] => 576
                            [campus_title_override] => New York - Queens
                        )

                    [8] => Array
                        (
                            [campus] => 574
                            [campus_title_override] => Pennsylvania - Philadelphia
                        )

                    [9] => Array
                        (
                            [campus] => 560
                            [campus_title_override] => Tennessee - Nashville
                        )

                    [10] => Array
                        (
                            [campus] => 557
                            [campus_title_override] => Texas - Grand Prairie (Dallas/Fort Worth Metroplex)
                        )

                )

        )

    [2] => Array
        (
            [program] => 617
            [program_title_override] => 
            [campuses] => Array
                (
                    [0] => Array
                        (
                            [campus] => 269
                            [campus_title_override] => Connecticut - East Windsor
                        )

                    [1] => Array
                        (
                            [campus] => 279
                            [campus_title_override] => Indiana - Indianapolis
                        )

                    [2] => Array
                        (
                            [campus] => 570
                            [campus_title_override] => New Jersey  - Mahwah (Bergen County/NY Metro Area)
                        )

                    [3] => Array
                        (
                            [campus] => 557
                            [campus_title_override] => Texas - Grand Prairie (Dallas/Fort Worth Metroplex)
                        )

                )

        )

    [3] => Array
        (
            [program] => 582
            [program_title_override] => 
            [campuses] => Array
                (
                    [0] => Array
                        (
                            [campus] => 267
                            [campus_title_override] => Colorado - Denver
                        )

                    [1] => Array
                        (
                            [campus] => 269
                            [campus_title_override] => Connecticut - East Windsor
                        )

                    [2] => Array
                        (
                            [campus] => 277
                            [campus_title_override] => Illinois - Melrose Park (Chicago Area)
                        )

                    [3] => Array
                        (
                            [campus] => 279
                            [campus_title_override] => Indiana - Indianapolis
                        )

                    [4] => Array
                        (
                            [campus] => 560
                            [campus_title_override] => Tennessee - Nashville
                        )

                    [5] => Array
                        (
                            [campus] => 557
                            [campus_title_override] => Texas - Grand Prairie
                        )

                )

        )
campus\u title\u override
键中,如果值与“newjersey”匹配,我希望返回与newjersey数组键匹配的数组结果。在当前数组中,在
数组0、1和2
中,它在
campus\u title\u override
键中具有值
“newjersey”
。我只想返回数组
ID 0,1和2
。无论什么匹配键值到“newjersey”,我都要返回主数组结果集

我从stackoverflow中尝试了以下示例

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}


print_r(search($array, 'campus_title_override', 'New Jersey'));
它返回空的结果集

我还对如何在该阵列集上执行相同操作提出了疑问:

       Array
(
    [0] => Array
        (
            [campus] => 269
            [campus_title_override] => Connecticut - East Windsor
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 313
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 582
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 617
                            [program_title_override] => 
                        )

                    [3] => Array
                        (
                            [program] => 584
                            [program_title_override] => 
                        )

                    [4] => Array
                        (
                            [program] => 619
                            [program_title_override] => 
                        )

                    [5] => Array
                        (
                            [program] => 621
                            [program_title_override] => 
                        )

                    [6] => Array
                        (
                            [program] => 625
                            [program_title_override] => 
                        )

                )

        )

    [1] => Array
        (
            [campus] => 271
            [campus_title_override] => Connecticut - New Britain
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 619
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 621
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 599
                            [program_title_override] => 
                        )

                    [3] => Array
                        (
                            [program] => 607
                            [program_title_override] => 
                        )

                )

        )

    [2] => Array
        (
            [campus] => 273
            [campus_title_override] => Connecticut - Shelton
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 619
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 599
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 607
                            [program_title_override] => 
                        )

                    [3] => Array
                        (
                            [program] => 609
                            [program_title_override] => 
                        )

                )

        )

    [3] => Array
        (
            [campus] => 283
            [campus_title_override] => Massachusetts - Somerville (Boston Area)
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 595
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 599
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 605
                            [program_title_override] => 
                        )

                )

        )

    [4] => Array
        (
            [campus] => 564
            [campus_title_override] => New Jersey - Iselin (Formerly located in Edison, NJ)
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 611
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 599
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 607
                            [program_title_override] => 
                        )

                )

        )

    [5] => Array
        (
            [campus] => 570
            [campus_title_override] => New Jersey - Mahwah (Bergen County/NY Metro Area)
            [programs] => Array
                (
                    [0] => Array
                        (
                            [program] => 313
                            [program_title_override] => 
                        )

                    [1] => Array
                        (
                            [program] => 617
                            [program_title_override] => 
                        )

                    [2] => Array
                        (
                            [program] => 619
                            [program_title_override] => 
                        )

                    [3] => Array
                        (
                            [program] => 621
                            [program_title_override] => 
                        )

                )

        )

只需使用

对于每个元素循环,通过它的
校园
属性,并检查是否找到您想要的条件

如果满足条件,则将主id插入数组并断开第二个for循环

示例:

$ids = [];

$array = [
    [
        'campuses' => [
            [
                'campus_title_override' => 'a'
            ]
        ]
    ]
];

foreach ($array as $id => $obj)
{
    foreach ($obj['campuses'] as $campus)
    {
        if ($campus['campus_title_override'] == 'a')
        {
            array_push($ids, $id);
            break;
        }
    }
}

var_dump($ids);
您可以了解有关多维数组和的更多信息


请阅读文章以了解此代码的功能,不要只是复制;)

只需使用

对于每个元素循环,通过它的
校园
属性,并检查是否找到您想要的条件

如果满足条件,则将主id插入数组并断开第二个for循环

示例:

$ids = [];

$array = [
    [
        'campuses' => [
            [
                'campus_title_override' => 'a'
            ]
        ]
    ]
];

foreach ($array as $id => $obj)
{
    foreach ($obj['campuses'] as $campus)
    {
        if ($campus['campus_title_override'] == 'a')
        {
            array_push($ids, $id);
            break;
        }
    }
}

var_dump($ids);
您可以了解有关多维数组和的更多信息


请阅读文章以了解此代码的功能,不要只是复制;)

对于深度级别为2的阵列,即

array(
[0]   =>  array(
               [key]   => 'value'
          )
)
您可以使用array_search,但它不适用于您的数组。要进行搜索,您必须使用foreach循环手动搜索

$mainArray = array(
        'compression' => array('7z', 'cbr', 'deb', 'gz', 'pkg', 'rar', 'rpm', 'sitx', 'tar.gz', 'zip', 'zipx'),
        'scripts' => array('php', 'js', 'css', 'asp', 'aspx', 'htm', 'html', 'cc', 'cpp', 'py', 'jsp'),
        'documentType' => array('txt', 'doc', 'docx', 'log', 'rtf'),
    );
    foreach($mainArray as $key=>$value){
        if (in_array(strtolower('php'), $value)){ // Return only if found during the loop
           return $key;
        }
    }

我希望这有帮助。

对于深度级别为2的阵列,即

array(
[0]   =>  array(
               [key]   => 'value'
          )
)
您可以使用array_search,但它不适用于您的数组。要进行搜索,您必须使用foreach循环手动搜索

$mainArray = array(
        'compression' => array('7z', 'cbr', 'deb', 'gz', 'pkg', 'rar', 'rpm', 'sitx', 'tar.gz', 'zip', 'zipx'),
        'scripts' => array('php', 'js', 'css', 'asp', 'aspx', 'htm', 'html', 'cc', 'cpp', 'py', 'jsp'),
        'documentType' => array('txt', 'doc', 'docx', 'log', 'rtf'),
    );
    foreach($mainArray as $key=>$value){
        if (in_array(strtolower('php'), $value)){ // Return only if found during the loop
           return $key;
        }
    }

我希望这会有所帮助。

您可以使用2
foreach
(1用于元素,1用于校园)和
strpos()
来搜索
campus\u title\u override
的值是否包含搜索值

$array = array(/*your data*/); 
$search = "New Jersey";
$out = [];
// for each element in the array,
foreach ($array as $index => $item) {
  // for each campuses,
  foreach ($item['campuses'] as $campus) {
    // if 'campus_title_override' contains search,
    if (strpos($campus['campus_title_override'], $search) !== false) {
      $out[] = $item ;
      break; // no need to continue, we got the item.
    }
  }
}
print_r($out);
产出:()


您可以使用2
foreach
(1用于元素,1用于校园)和
strpos()
来搜索
campus\u title\u override
的值是否包含搜索值

$array = array(/*your data*/); 
$search = "New Jersey";
$out = [];
// for each element in the array,
foreach ($array as $index => $item) {
  // for each campuses,
  foreach ($item['campuses'] as $campus) {
    // if 'campus_title_override' contains search,
    if (strpos($campus['campus_title_override'], $search) !== false) {
      $out[] = $item ;
      break; // no need to continue, we got the item.
    }
  }
}
print_r($out);
产出:()


你试过什么?你有密码吗?请检查,以便我们能更好地帮助您!你试过什么?你有密码吗?请检查,以便我们能更好地帮助您!我如何返回与数组匹配的整个结果集?@unixmiah是否要获取“校园”或
$item
?例如,在第一个数组结果集中,如果它与数组campus\u title\u override中的新泽西匹配,我要返回该数组的结果集,如此数组([0]=>数组([程序]=>615[program\u title\u override]=>[campus]=>Array([0]=>Array([campus]=>572[campus\u title\u override]=>NewJersey-Moorestown)))因此,我不想返回0,1,2,而是想返回数组结果集我想返回与校园中新泽西州匹配的数组结果\u title\u override如何返回与数组匹配的整个结果集?@unixmiah您想获得“校园”吗或者
$item
?例如,在第一个数组结果集中,如果它与数组campus\u title\u override中的newjersey匹配,我想返回该数组的结果集,就像这个数组([0]=>数组([program]=>615[program\u title\u override]=>[campus]=>数组一样([0]=>Array([campus]=>572[campus\u title\u override]=>newjersey-Moorestown)))因此,我想返回数组结果集,而不是返回0,1,2,我想返回与校园标题覆盖中的新泽西匹配的数组结果