如何在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,我想返回与校园标题覆盖中的新泽西匹配的数组结果