2017-09-12 13 views
0

要するに、2つの$ XML配列と$ DB配列があり、どちらもコードのような値を持っています。array_key_existsは2番目の配列要素を見つけません

私は最初のものをforeach、私はコードをダウンロードし、2番目の$ DBでそれを探しています。 $ DBにコードが含まれている場合は、存在していない場合はその情報を表示しますが、そうでない場合は表示します。代わりにキーが配列であるという情報を、私はあなたが別の配列の値に1、配列の値をチェックしようとしている

$XML = array(
    array(
     "code" => 456, 
    ), 
    array(
     "code" => 789, 
    ), 
); 

$DB = array(
    array(
     "code" => 456, 
    ), 
    array(
     "code" => 789, 
    ), 
); 

foreach ($XML as $product) { 


    if (array_key_exists($product['code'], $DB)) { 

     echo "Key is in DB array"; 

    } else { 

     echo "Key isn't in DB array"; 
    } 

} 
+6

キーあなたの '$ DB'配列である0と1 –

+0

うん、意図したとおり、それは働いている@u_mulderが言ったように、 '$ DB'で配列の中の一つを見るか、ネストしたループをする必要があります。 – Script47

答えて

0

他に取得するので - 少なくとも私はそれになりたいです。

だから、あなたは以下のようにarray_columnin_arrayが必要: -

説明: -

1. in_array値を検索するには、配列かどうかに存在します。

2. array_columnは、多次元配列から与えられたインデックス名に基づいて1次元配列を返します。

3.So今のコードは次のようになります: - if (in_array(456, Array(0 => 456,1 => 789)){

今では正常に動作します。

$db_array = array_column($DB,'code'); 
foreach ($XML as $product) { 
    if (in_array($product['code'],$db_array)) { 
     echo "Product code ".$product['code']." is in DB array\n"; 
    } else { 
     echo "Product code ".$product['code']." isn't in DB array\n"; 
    } 
} 

出力: - https://eval.in/860191

+1

*なぜ彼はそんなことをする必要がありますか? – Tolios

+0

@Toliosは何をしますか? 'in_array'や@AlivetoDieのメソッドが表示されていますか? – Script47

+0

Aliveが彼の答えに書いたもの、*なぜ*は質問への(可能な)解決策です^^ Script47 – Tolios

1

あなただけの両方のアレイにある共有コードの後に​​ある場合、あなたはarray_intersectとarray_columnを使用することができます。

<?php 

function codes_shared(array $one, array $two) { 
    return array_intersect(array_column($one, 'code'), array_column($two, 'code')); 
} 

例:

$xml = array(
    array(
     "code" => 456, 
    ), 
    array(
     "code" => 789, 
    ), 
); 

$one = array(
    array(
     "code" => 789, 
    ), 
    array(
     "code" => 123, 
    ), 
); 
$two = array(
    array(
     "code" => 456, 
    ), 
    array(
     "code" => 99, 
    ), 
); 
$three = array(
    array(
     "code" => 33, 
    ), 
    array(
     "code" => 1, 
    ), 
); 
$four = array(
    array(
     "code" => 456, 
    ), 
    array(
     "code" => 789, 
    ), 
); 
foreach([$one, $two, $three, $four] as $db) { 
    var_dump(codes_shared($xml, $db)); 
} 

出力:

array(1) { 
[1]=> 
int(789) 
} 
array(1) { 
[0]=> 
int(456) 
} 
array(0) { 
} 
array(2) { 
[0]=> 
int(456) 
[1]=> 
int(789) 
} 
関連する問題