2014-01-13 107 views
0

我有一个内部数组的数组。我需要用f.x找到一个元素。 ['ID'=> 9],然后从中获取国家/货币。我怎么能找到这样的元素?到目前为止,我会循环检查每个阵列的ID,我相信这可能会更简单。谢谢!搜索数组中的元素

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
    ... 
); 

UPDATE 我想通过任意键能够搜索:ID,国家,货币

+0

所以你_know_什么ID是你找谁? –

+0

如果您知道您将始终在寻找什么值并使用array_keys或array_key_exists(),则可以将某个键与每个子数组关联以便于遍历。 –

+0

好吧,我希望能够通过任何键(ID,国家,货币)来查看元素。 –

回答

2

如果阵列的ID都是唯一的,那么你可以使用array_filter(),如:

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 

$id = 9; 
$result = array_shift(array_filter($countries, function($item) use ($id) 
{ 
    return $item['ID']==$id; 
}))['Country']; 

- 但如果ID是非唯一的,上面的代码将返回第一个找到的ID的国家。还要注意,这种解除引用的方式只能在PHP> = 5.4中使用(在早期版本中,您必须首先找到数组元素,然后访问它的Country键)。

要按任意键搜索,你可以使用:

$key = 'ID'; 
$value = 9; 
$result = array_shift(array_filter($countries, function($item) use ($key, $value) 
{ 
    //change == to === for strict comparison: 
    return array_key_exists($key, $item) && $item[$key]==$value; 
})); //whole element, not only 'Country' key what cause if search will be by Country? 
+0

这个答案对我来说最重要,谢谢。 –

2

最简单的办法是解决它,所以当你建立数组,你把ID为阵列的键。因此,它看起来像

$countries = array(
    8=>array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    9=>array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
    ... 
); 

然后你可以简单的做$countries[8]

+0

Nah,会是'$ countries [8] ['id']'或'$ countries [8] ['Country']',它是多维的:) –

+1

@ Mr.Alien这将是如果你想要一个特定的键在那个阵列中。你可以通过执行'$ countries [8]'来获得整个数组。看看你是如何做到你的每个例子的第一部分? * smh * – Jessica

+0

很明显,但接下来的问题是,现在我试图'回声',但它不起作用,因为他写*,然后从中得到国家/货币* –

0

类似PHP multidimensional array search by value

[OR]

可以使ID作为父数组的索引并访问其值直接使用ID。 例如:

$countries = array(
8 => array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
9 => array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
... 
); 
0

现场演示:https://eval.in/88626
试试这个:

创建一个ID一个新的数组作为这样的关键:

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 
$outArray = array(); 
foreach($countries as $country){ 
$outArray[$country['ID']] = $country; 
} 

访问阵列,通过其ID喜欢这

print_r($outArray[8]['Country']); 

输出:

Finland 

更新搜索:
现场演示:https://eval.in/88651

$countries = array(
     array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
     array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
    ); 
$r1 = getArrayById($countries,8); 
$r2 = getArrayById($countries,'Finland'); 
$r3 = getArrayById($countries,'EUR'); 

    print_r($r1); 
    print_r($r2); 
    print_r($r3); 

function getArrayById($countries,$val){ 
$outArray = array(); 
    foreach($countries as $country){ 
    if(in_array($val,$country)){ 
     $outArray[$country['ID']] = $country; 
     } 
    } 
    return $outArray; 
} 

输出:

Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

) 


Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

) 


Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

    [9] => Array 
     (
      [ID] => 9 
      [Country] => France 
      [Currency] => EUR 
     ) 

) 
0

您可以创建应该为你做的工作的功能,它不会得到重复的ID。

工作例如:example

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 

echo '<pre>'; 

function find($word, $countries, $result = null){ 

    foreach($countries as $k => $v){ 

     if(in_array($word, $v)){ 
      $result[$v['ID']] = $v; // Do not get duplicated id's 
     } 
    } 
    return $result; 
}; 

$result = array(); 

$result = find('Finland', $countries); // Get's ID 8 
$result = find('EUR', $countries, $result); // Get's id 8 and 9, don't duplicate 
$result = find('9', $countries, $result); // Get ids 9 but don't duplicate 

print_r($result); 

输出

Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

    [9] => Array 
     (
      [ID] => 9 
      [Country] => France 
      [Currency] => EUR 
     ) 
)