2017-02-22 9 views
1

私は$ match_keyの配列項目のいずれかの側ある2つの変数を作成したいと考え、以下の単純な配列とPHPPHPリターンと前回の配列項目

$my_array=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"purple","e"=>"yellow"); 


$match_key = array_search("blue",$my_array); 
       echo $match_key; 

を持っています。したがって、上記の例では、私は最後にしようとしています...

$previous = 'green'; 
$next = 'purple'; 

これに取り組む最も良い方法は何ですか?

答えて

1

あなたのアレイ構造を変更する方法がない場合は、あなたがarray_values()

返し
$vals = array_values($my_array); 
$match_key = array_search("blue", $vals); 

echo "PREV: ". $vals [($match_key - 1)] . "\n"; 
echo "CURR: ". $vals[$match_key] ."\n"; 
echo "NEXT: ". $vals [($match_key + 1)] . "\n"; 

を経由して、元の配列のだけ値を持つ新しい配列を「作成」で、次の操作を行うことができます:

PREV: green 
CURR: blue 
NEXT: purple 

コードがエラーを投げず、微妙にキーを処理するようにするには、キー処理/ etcを行う必要があります。一見プロセスに時間がかかったが


は、内蔵機能ハーネス様々な他の方法(inspired by this post)があります

前戻り
$match_key = array_search("blue", $my_array); 
// loop through and set the array pointer to the $match_key element 
while (key($my_array) !== $match_key) next($my_array); 

$current = $my_array[$match_key]; 
$prev = prev($my_array); 
next($my_array); // set the array pointer to the next elem (as we went back 1 via prev()) 
$next = next($my_array); 

、次のように以下&電流:

CURRENT: blue 
PREVIOUS: green 
NEXT:  purple 
+0

私は、次と前のキーを制限するためにminとmaxを使い、array_valuesを使って配列のインデックスが常に0になるようにすることをお勧めします。 – fubar

+0

@Rob合意しましたが、私は質問の範囲に答えました。彼はOPに戻ってくるものを見てみましょう – Darren

0

array_values()を使用する方法があります。これにより、元の配列と同じ順序で新しい索引配列が作成されます。

次に数値インデックスを返すarray_search()を使用して値を検索することができます。その後、次のものは+1、前のものは-1となります。

もちろん、検索している値が実際に存在することを確認することができます。その場合は、index+1index-1も存在することを確認し、そうでない場合はnullと設定してください。

このような何か:

$my_val = 'blue'; 

$int_indexes = array_values($my_array); // store all values into integer indexed array 

if ($index = array_search($my_val, $int_indexes)) { // don't set prev-next if value not found 
    $prev = array_key_exists($index - 1, $int_indexes) ? $int_indexes[$index - 1] : null; 
    $next = array_key_exists($index + 1, $int_indexes) ? $int_indexes[$index + 1] : null; 
} 

echo "previous: $prev" . '<br>'; 
echo "this: $my_val" . '<br>'; 
echo "next: $next"; 

はあなたに結果を与える:

// previous: green 
// this:  blue 
// next:  purple 

をそして、あなたの検索値が先頭または末尾にある場合は、何の心配は、あなただけのnull値を取得していません。そしてそれはあなたの検索された値が見つかりません、心配、あなたは2 null値を取得します。

関連する問題