2016-01-11 30 views
0

我得到了真/假值這樣比較陣列,只保留真正的價值

$bools = array(
    0 => true, 
    1 => false, 
    2 => true, 
    3 => true, 
    4 => false 
); 

一個陣列和另一個陣列或價值一樣

$names = array(
    0 => 'joe', 
    1 => 'bob', 
    2 => 'steve', 
    3 => 'mario', 
    4 => 'george' 
); 

我需要什麼,是爲了獲得回報陣列(在PHP)僅包含從陣列2相比陣列1的真實值,從而最終的陣列將是:

$result = array(
    0 => 'joe', 
    1 => 'steve', 
    2 => 'mario' 
); 
+0

您是否嘗試過的東西或者做了一些研究,試圖讓你的目標是什麼? – Rizier123

+0

1.轉到google 2.寫php array_map() 3.閱讀說明書 4.編寫代碼並解決問題 5.回去說聲謝謝 – Daredzik

+0

我試着用counter和foreach循環,但是我搞混了! – menardmam

回答

3

首先,使用array_combine()的陣列組合:

array_combine($names, $bools); 

這將導致:

array (
    joe => true, 
    bob => false, 
    steve => true, 
    mario => true, 
    george => false) 

然後,array_keys()提取想要的名字:

$result = array_keys(array_combine($names, $bools), true); 

這將只返回具有值true鍵:

$result = array(
    0 => 'joe', 
    1 => 'steve', 
    2 => 'mario' 
); 
+0

美觀,操作簡單,一個襯墊。代碼是藝術! – menardmam

+1

這裏唯一的限制值得大家注意的是,因爲它們被用作過程中的關鍵每個元素只能在陣列中出現一次。 – Rizier123

0
$a = [true,false,true,true,false]; 
$b = ['bob','jiw','mow','moe','windy']; 
$final_arr = array(); 
foreach($a as $k => $v){ 
    if($v)$final_arr[] = $b[$k]; 
} 
print_r($final_arr); 
+3

儘管這段代碼可以解決這個問題,但代碼中的[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123

-1
$result = array_filter(array_combine($keys, $values)); 
+0

這應該如何工作? – Rizier123

+0

'$ keys'是名稱數組,'$ values'是true/false數組,它與一個添加的'array_keys()'一起工作。 –

+0

@ Rizier123'array_combine'將使關聯數組(JOE =>真,鮑勃=>假,史蒂夫=>真,馬里奧=>真,喬治=>假)和'array_filter'將下降用假值的元素。 – kozlice

3

首先,您可以用array_filter()過濾掉第一個數組中的所有虛假值。所以你最終會得到一個包含你想保留在另一個數組中的所有鍵的數組。

然後,您可以使用array_intersect_key()從第二個數組和第一個數組中過濾第一個數組的交集,例如,

$result = array_intersect_key($arrayTwo, array_filter($arrayOne)); 
+1

是,如果他需要重新索引陣列中使用'array_values'功能 –

-1
$bools = array(
    true, 
    true, 
    false, 
    false, 
    true, 
); 
$names = array(
    'a', 
    'b', 
    'c', 
    'd', 
    'e', 
); 
$result = array_values(array_intersect_key($names, array_filter($bools))); 
dumpr($result); 

結果:

array(3) { 
    [0] = string(1) "a" 
    [1] = string(1) "b" 
    [2] = string(1) "e" 
} 
+1

反正ü使用的參數錯誤的命令,直到有人已經張貼同樣的事情更好的解釋 –

3

試試這個代碼,我有寫代碼,例如只。根據您的要求定製它。

$a = array (true,false,true,true,false);  
$b = array ('one','two','three','four','five'); 
$c = array(); 
for ($i=0; $i < sizeof($a); $i++) { 
    if ($a[$i] == 'true'){ 
     $c[$i] = $b[$i]; //store output values into another array 
    } 
} 
0

這裏是基本foreach()循環的例子:

$bools = array(
    0 => true, 
    1 => false, 
    2 => true, 
    3 => true, 
    4 => false 
); 

$names = array(
    0 => 'joe', 
    1 => 'bob', 
    2 => 'steve', 
    3 => 'mario', 
    4 => 'george' 
); 

$yourArr = array(); 
foreach ($names as $key => $value) { 
    if($bools[$key] == true){ 
     $yourArr[] = $value; // store required values in your required array 
    } 
} 
echo "<pre>"; 
print_r($yourArr); 

結果:

Array 
(
    [0] => joe 
    [1] => steve 
    [2] => mario 
)