2017-03-21 130 views
0

我有與多個內容的密鑰的陣列。我想獲得包含我搜索關鍵字的數組。搜索在陣列中的JSON文件

$arr = json_decode('{"people":[ 
{ 
    "id": "8080", 
    "content": "foo", 
    "member": [123, 456], 
    "interval": 7 
}, 
{ 
    "id": "8097", 
    "content": "bar", 
    "member": [1234, 4567], 
    "interval": 7 
} 


]}', true); 


$results = array_filter($arr['people'], function($people) { 
    return $people['id'] == 8080; 
}); 

echo json_encode($results); 

這將返回:

{ 「ID」: 「8080」, 「內容」: 「foo」 的, 「部件」:[123456], 「間隔」:7}

我想的是:

$results = array_filter($arr['people'], function($people) { 
    return $people['member'] == 123; 
}); 

這是行不通的。

有別人的想法?

+2

[in_array()](http://php.net/in_array)? –

回答

1

由於@JonStirling在評論說。使用in_array()函數。

$arr = json_decode('{"people":[ 
{ 
    "id": "8080", 
    "content": "foo", 
    "member": [123, 456], 
    "interval": 7 
}, 
{ 
    "id": "8097", 
    "content": "bar", 
    "member": [1234, 4567], 
    "interval": 7 
} 


]}', true); 

$searchId = 123; 
$results = array_filter($arr['people'], function($people) use ($searchId) { 
    return in_array($searchId, $people['member']); 
}); 

echo json_encode($results); 

結果:

[{ 「ID」: 「8080」, 「內容」: 「foo」 的, 「部件」:[123456], 「間隔」:7}]

+0

謝謝,我工作正常:) –

0

看看這有助於:

$arr = json_decode('{"people":[ 
{ 
    "id": "8080", 
    "content": "foo", 
    "member": [123, 456], 
    "interval": 7 
}, 
{ 
    "id": "8097", 
    "content": "bar", 
    "member": [1234, 4567], 
    "interval": 7 
} 


]}', true); 

$results = array_filter($arr['people'], function($people) { 
    for($i=0; $i<count($people['member']); $i++){ 
     return $people['member'][$i] == 123; 
    } 
}); 

echo json_encode($results); 

的出落得將是:

[{ 「ID」: 「8080」, 「內容」: 「富」, 「成員」: [123456], 「間隔」:7}]

0

如果你想這樣做withouth的 'array_filter' 你可以試試這個:

function search($arr, $id, $arrayValue) 
{ 
    $people = null; 
    foreach ($arr['people'] as $a) 
    { 
     if ($a['id'] == $id) 
     { 
      $people = $a; 
     } 
    } 

    $arrayWeAreLookingFor = null; 
    foreach ($people as $property => $value) 
    { 
     if (is_array($value)) 
     { 
      foreach ($value as $v) 
      { 
       if ($v == $arrayValue) 
       { 
        $arrayWeAreLookingFor = $people[$property]; 
       } 
      } 
     } 
    } 

    return $arrayWeAreLookingFor; 
} 

var_dump(search($arr, 8080, 123));