2011-12-06 19 views
3

にインデックス位置を使用して値を連想配列にアクセスする方法その1:のような連想配列でPHP

$fruits[2]; 

これは与える:私が使用して値にアクセスしてみました

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 

私はPHPのnotcie:未定義のオフセット;

どうすればいいですか?

ありがとうございました

+1

あなたはこれをしたいのはなぜ?あなたの配列はインデックス '2'を持たず、その3番目のインデックスは' b'です。あなたはそれを両方向に持つことはできません。 – deceze

+0

@Chris実際、PHP配列は*注文されています。 :) – deceze

+0

@deceze同時に2つの配列を繰り返し処理する必要があるので、forループを使用して、次のようなチェックをすることができます。$ array1 [$ i] == $ array2 [$ i] – silkAdmin

答えて

7

連想配列として保持したくない場合は、あなたは数字キーインデックスを使用したい場合は、この操作を行うことができます:

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 
$fruits2 = array_values($fruits); 

echo $fruits2[2]; 

は、PHPマニュアルでよりおよそarray_values()をご覧ください。


UPDATE:あなたがこれを行うことができ、あなたのコメントで述べたように2つの連想配列を比較する(彼らは同じキーを持っている場合 - あなたはisset()チェックを追加する必要がない場合):

foreach (array_keys($arr1) as $key) { 
    if ($arr1[$key] == $arr2[$key]) { 
    echo '$arr1 and $arr2 have the same value for ' . $key; 
    } 
} 

かをarray_keys関数呼び出しを避けるために:

foreach ($arr1 as $key => $val) { 
    if ($val == $arr2[$key]) { 
    echo '$arr1 and $arr2 have the same value for ' . $key; 
    } 
} 
+0

この解決策は、私がやろうとしていること(上記のコメントを参照)で動作しませんが、より具体的な質問を投稿します。 – silkAdmin

+0

私はそれが... array_values()を使って2つの配列のそれぞれを変換し、次にそれらをあなたが計画したように比較すると信じています。 – rdlowrey

+0

これを開発してくれてありがとう、私はこれらの2つの配列が異なるキーを持っていることを述べておくべきである。それらはarray_count_value関数の戻り値です。そのキーはarray_count_valuesに渡される初期配列の値であり、値はその配列のその値のインスタンス数です。 – silkAdmin

1

これは別の考えです。最終目標やより大きなプロジェクトに関する直接的な情報がなければ、具体的な実装については話すことができません。

<?php 
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry'); 
$flavors = array('a' => 'crisp', 'b' => 'mushy', 'c' => 'tart'); 

reset($fruit); 
reset($flavors); 

while (list($key, $val) = each($fruit)) 
{ 
    list($flavorKey, $attribute) = each($flavors); 

    echo "{$key} => {$val}<br>\n"; 
    echo "{$attribute}<br><br>\n"; 
} 

は、[array_count_valuesについてのコメントをもとに編集]

<? 

$words = explode(" ", 'the quick brown fox jumped over the lazy yellow dog'); 
$words2 = explode(" ", 'the fast fox jumped over the yellow river'); 
$counts = array_count_values($words); 
$counts2 = array_count_values($words2); 

foreach($counts as $word => $count) 
{ 
    if (array_key_exists($word, $counts2) && $counts2[$word] == $counts[$word]) 
    { 
     echo $word . ' matched.<br>'; 
    } 
} 
+0

のための追加チェックで後者の2つのメソッドを使うことができるようです。私の場合はキー値を操作する必要があるためです。このスニペットに感謝します! – silkAdmin

+0

最後のコードはダムです。キーが存在する場合、それは一致するでしょう。 :p –