2016-03-21 4 views
1

Вот мой первый массивСравнение ключей массива в PHP

$array1 = [ 
     'A' => 'Apple', 
     'B' => 'Ball', 
     'C' => 'Cat', 
     'E' => 'Eagle', 
     'F' => 'Fan' 
    ]; 

Второй массив

$array2 = [ 
     'A' => 'apple is a fruit', 
     'B' => 'ball is used to play', 
     'C' => 'cat is an animal', 
     'D' => '', 
     'E' => 'eagle is a bird', 
     'F' => '' 
    ]; 

Выходной ток:

Array 
(
    [Apple] => apple is a fruit 
    [Ball] => ball is used to play 
    [Cat] => cat is an animal 
    [Eagle] => eagle is a bird 
    [Fan] => 
) 

Ожидаемый результат:

Array 
    (
     [Apple] => apple is a fruit 
     [Ball] => ball is used to play 
     [Cat] => cat is an animal 
     [Eagle] => eagle is a bird 
    ) 

Я попытался, как этого

$arr4 = []; 
if ($arr3 = array_intersect_key($array1, $array2)) { 
    foreach ($arr3 as $k => $v) { 
     $arr4[$v] = $array2[$k]; 
    } 
} 

print_r($arr4); 

Пожалуйста, помогите, спасибо заранее! Если вы видите текущий выход, я получаю результат Fan, который не имеет значения. Мне нужно, чтобы получить результаты, которые имеющие значения как ожидаемый выход

+0

Весь код прекрасно использовать 'array_remove ($ arr4)', чтобы удалить пустые значения из массива; – itzmukeshy7

ответ

0

вы можете попробовать это

$array3 = []; 
foreach ($array1 as $key => $value) { 
    if ($array2[$key] != '') { 
     $array3[$value] = $array2[$key]; 
    } 
} 

echo '<pre>'; 
print_r($array3); 
4

Попробуйте это:

<?php 

$array1 = [ 
     'A' => 'Apple', 
     'B' => 'Ball', 
     'C' => 'Cat', 
     'E' => 'Eagle', 
     'F' => 'Fan' 
    ]; 


$array2 = [ 
     'A' => 'apple is a fruit', 
     'B' => 'ball is used to play', 
     'C' => 'cat is an animal', 
     'D' => '', 
     'E' => 'eagle is a bird', 
     'F' => '' 
    ]; 


$result = []; 

foreach($array2 as $key => $value) 
{ 
    if(!empty($value) && isset($array1[$key])) 
     $result[$array1[$key]] = $value; 
} 


echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

Выход:

Array 
(
    [Apple] => apple is a fruit 
    [Ball] => ball is used to play 
    [Cat] => cat is an animal 
    [Eagle] => eagle is a bird 
) 
+1

голосовать за оптимизированное решение – devpro

1

Вы можете использование array_filter() функция для удаления пустого результата:

<?php 
$array1 = array(
     'A' => 'Apple', 
     'B' => 'Ball', 
     'C' => 'Cat', 
     'E' => 'Eagle', 
     'F' => 'Fan' 
    ); 
$array2 = array(
     'A' => 'apple is a fruit', 
     'B' => 'ball is used to play', 
     'C' => 'cat is an animal', 
     'D' => '', 
     'E' => 'eagle is a bird', 
     'F' => '' 
    ); 

$arr4 = array(); 

if ($arr3 = array_intersect_key($array1, $array2)) { 
    foreach ($arr3 as $k => $v) { 
    $arr4[$v] = $array2[$k]; 
    } 
} 
$removedEmpty = array_filter($arr4); 
echo "<pre>"; 
print_r($removedEmpty); 
?> 

Результат:

Array 
(
    [Apple] => apple is a fruit 
    [Ball] => ball is used to play 
    [Cat] => cat is an animal 
    [Eagle] => eagle is a bird 
) 
0

Добавить IF внутри foreach

if ($arr3 = array_intersect_key($array1, $array2)) { 
     foreach ($arr3 as $k => $v) { 
      if($array2[$k]){ 
      $arr4[$v] = $array2[$k]; 
      } 
     } 
    } 
0

Короткое решение с array_filter, array_intersect_key и array_combine функции:

$array2 = array_filter($array2); 

var_dump(array_combine(array_intersect_key($array1,$array2), $array2)); 

Выход:

array(4) { 
    ["Apple"]=> 
    string(16) "apple is a fruit" 
    ["Ball"]=> 
    string(20) "ball is used to play" 
    ["Cat"]=> 
    string(16) "cat is an animal" 
    ["Eagle"]=> 
    string(15) "eagle is a bird" 
}