2014-10-10 39 views
0

大家好,使用PHP!组合数组形式的值和键组合

我一直在寻找答案。 我有两个数组 - Persons数组中的人员和其他索引数组。

Persons(array)   Selected indexes(array) 
    [0] => 'Mark'   [0] => 0 
    [1] => 'Jane'   [1] => 2 
    [2] => 'Bob'    [2] => 1 
    [3] => 'Jack'    

我想创建一个第三阵列仅由从在Selected indexes阵列组Persons数组中的元素。 有点像SELECT * FROM Persons WHERE 'Persons id' IN 'Selected indexes'但在PHP中,如果你知道我的意思吗?

我可以“foreach”后者,并推送元素到新的阵列,但有一个较短的PHP解决方案,例如对于内联使用?

编辑:哦,输出应该是:

Selected persons(array)   
    [0] => 'Mark'    
    [1] => 'Jane'   
    [2] => 'Bob'  

(only 0, 2 and 1) 
+0

array_combine()与array_slice()和分钟(的组合)和count()应该做的伎俩 – 2014-10-10 15:19:51

+0

HTTP:// PHP .net/array_intersect应该让你开始,尽管它不会直接做你想做的。 – 2014-10-10 15:19:57

回答

3
$result = array_intersect_key($people, array_flip($selected)); 
+0

这是正确的!谢谢!在浏览手册时,我尽量保持眼睛的开阔。 – Klamberext 2014-10-10 15:29:08

1

@Steve已经贴出这样做最彻底的方法,这里是一个替代

$counter = min(count($selected), count($persons)); 
$result = array_combine(
    array_slice($selected, 0, $counter), 
    array_slice($persons, 0, $counter) 
); 
0

这应该工作您!

<?php 

    $person = array('Mark', 'Jane', 'Bob', 'Jack'); 
    $selected = array(0, 2, 1); 
    $selectedPerson = array(); 


    foreach($selected as $key) 
     $selectedPerson[] = $person[$key]; 

    var_dump($selectedPerson); 

?> 
0

array_intersect_key()是你在找什么

$Persons[0]='Mark'; 
$Persons[1]='Jane'; 
$Persons[2]='Bob'; 
$Persons[3]='Jack'; 

$Selected = array(0,2); 

$result = array_intersect_key($Persons, array_flip($Selected)) 

var_dump($result); // returns Mark, Bob.