2017-02-14 9 views
2

私はPHPを学んでいますが、指定された文字列の配列を検索し、一致する場合は値を返します。私はin_array()array_searchを使用しようとしましたが、どちらも正しく値を一致/返すことができませんでした。文字列の2D関連配列をチェックし、情報を返します。(PHP)

print_r($ names);

Array 
(
    [0] => Array 
     (
      [name] => A 
      [age] => 42 
      [location] => Australia 
     ) 

    [1] => Array 
     (
      [name] => B 
      [age] => 21 
      [location] => France 
     ) 

    [2] => Array 
     (
      [name] => Z 
      [age] => 50 
      [location] => Japan 
     ) 
) 

私は名前が配列に存在するかどうかを確認し、同じインデックスの場所の情報を返すために、チェックしたいと思います。

$name="A"; 
if (in_array($name, $names)) { 
    $age=$names['age']; 
    $location=$names['location']; 
    echo "$name was found! Their Age is: $age, They are based in: $location"; 
} 
else{ 
    echo"$name was not found"; 
} 

ただし、名前が見つからず、年齢と場所のデータが読み込まれません。

出力:

A was not found 

予想される出力:array_searchを使用して

A was found! Their Age is: 42, They are based in: Australia 

テスト()

$result = array_search("$name",$names); 
echo $result; 

値は印刷されません。

(in_array)の修正方法や、array_search()を使用して情報を一覧表示する方法についてのご意見をいただければ幸いです。

答えて

2

あなたはこれを試すことができます -

array_column($your_array, 'name') 

$position = array_search($name, array_column($your_array, 'name')); 
$info = $your_array[$position]; 

説明は、それぞれのインデックスを持つすべての名前の配列を返します。

array_search($name, array_column($your_array, 'name')) 

名前が見つかったインデックスを返します。

$info = $your_array[$position] 

$infoに特定のサブアレイを格納します。

だから、何かlike-

echo $info['name'] . " was found! Their Age is: " . $info['age'] . ", They are based in: " . $info['location']; 

array_column() & array_search()

Working code

+0

パーフェクトでなければなりません!ありがとう@Sougata Boseあなたの素早い返信とそれぞれのステップがどのように働いていたか説明するために、それは私のような初心者のためにとても役に立ちました:) – Ben

+0

同じ名前の別のインスタンスを検索し続けることは可能ですか? $ name = 'Z'という検索があり、Zのインスタンスが2つ存在する場合、両方のインスタンスの情報を表示できますか? '2' =>配列 ( '名称' => 'Z'、 '年齢' => 50、 '場所' => '日本'、 )、 '999' =>配列 ( 'name' => 'Z'、 'age' => 99、 'location' => 'フィンランド' Zが見つかりました。彼らの年齢は:50、彼らはに基づいています:日本 Zが見つかりました!彼らの年齢は:99、彼らはに基づいています:フィンランド – Ben

+1

その場合は、ループを使用し、最初の所見を解除する必要があります –

関連する問題