我有这样一个数组:
Array
(
[0] => Array
(
[name] => Dick Jansen
[matchedMovie] => Array
(
[0] => Array
(
[nameMovie] => Saw
[genre] => Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 100.00
)
)
)
[1] => Array
(
[name] => Jim Scott
[matchedMovie] => Array
(
[0] => Array
(
[nameMovie] => Shooter
[genre] => Action, Thriller
[patheMovie] => The Shining
[patheMovieGenre] => Horror, Suspense/Thriller
[score] => 52.38
)
[1] => Array
(
[nameMovie] => Resident Evil Movie
[genre] => Action/Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 63.16
)
)
)
)
我想搜索[patheMovie]值(如'The Shining'),并获得父数组与[name]加上只有[matchedMovie]数组与匹配的[patheMovie]返回。
我试过这样做:
$search='Texas Chainsaw 3D';
$sorted=false;
foreach ($sorted as $n=>$c)
if (in_array($search,$c)) {
$cluster=$n;
break;
}
例如,如果我搜索'The Shining',我希望数组像这样返回:
Array
(
[0] => Array
(
[name] => Dick Jansen
[nameMovie] => Saw
[genre] => Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 100.00
)
)
and if you search for 'Texas Chainsaw 3D' like so:
Array
(
[0] => Array
(
[name] => Dick Jansen
[nameMovie] => Saw
[genre] => Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 100.00
)
[1] => Array
(
[name] => Jim Scott
[nameMovie] => Resident Evil Movie
[genre] => Action/Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 63.16
)
)
这个解将依赖于两个共轭环。
<?php
function searchIt($arr, $searchItem){
$result = array();
$resultIndex = 0;
for ($i =0; $i < count($arr); $i++){
for ($j = 0; $j < count($arr[$i]['matchedMovie']); $j++){
if ($arr[$i]['matchedMovie'][$j]['patheMovie'] == $searchItem){
$result[$resultIndex]['name'] = $arr[$i]['name'];
foreach ($arr[$i]['matchedMovie'][$j] as $key => $value){
$result[$resultIndex][$key] = $value;
}
$resultIndex++;
}
}
}
return $result;
}
?>
<<h3> phpfiddle演示/h3> 还没有测试过,但这应该可以工作:
function findYourGuy($array, $searchTerm) {
$searchTerm = 'The Shining'; // testing purpose only
foreach($array as $personArray) {
$matchedMovies = $personArray['matchedMovie'];
$name = $personArray['name'];
foreach($matchedMovies as $matchedMovie) {
if($matchedMovie['patheMovie'] == $searchTerm) {
return array('name' => $name, 'matchedMovie' => $matchedMovie)
}
}
}
return false; //no result
}
我将使用array_filter。
$movieName = 'The shining';
$result = array_filter($movies, filterCallback);
function filterCallback($var)
{
foreach($var['matchedMovie'] as $movie) {
if($movie['PatheMovie'] == $movieName) {
return true;
}
}
}