2017-10-04 8 views
0

私は、増分ではなくカスタムキーの値を持つ配列を持っています PHPでカスタムキーを持つ配列の次の項目と前の項目を取得する方法

$array_same_cat = array("SF124" => "value", "XA127" => "value2", "AT257" => "value3"); 

私が取り組んでいるのは、前のキーと次のキーとその値のキー値(XA127)を検索することです。

ここで配列を生成するコードの下:このforeachので

$array_same_cat = array(); 
if($loop_arrows->have_posts()){ 
    while($loop_arrows->have_posts()){ 
     $loop_arrows->the_post(); 
     $current_id = get_the_ID(); 
     $this_prod_sku = get_post_meta($current_id, '_sku', true); 
     $array_same_cat[$this_prod_sku] = esc_url(get_permalink(intval($this_prod_sku))); 
    }    
} 

を追加しました。この 私は私の要素の正確な位置を見つけました。今私は前と次を行う方法を見つける必要があります。

私はあなたの質問から理解して何
foreach($array_same_cat as $ar){ 
    if($ar == $array_same_cat[$current_sku]){ 
     echo 'found'; 
    } 
} 

答えて

2

: - あなたはあなたが配列で検索すると、あなたはアウトを見つける必要があるキーを、持っている配列

  • を持って

    1. 前と次の値の後に

    これで、次のようにすることができます: -

    <?php 
    
    $array_same_cat = array("SF124" => "value", "XA127" => "value2", "AT257" => "value3"); 
    
    $search_key = 'XA127'; 
    
    $keys_array = array_keys($array_same_cat);//get keys array from original array 
    
    $get_search_value_key_from_value_array = array_search($search_key,$keys_array); // get index of given key inside keys array 
    
    $prev_key = $keys_array[$get_search_value_key_from_value_array -1]; // get previous key based on searched key index 
    
    $next_key = $keys_array[$get_search_value_key_from_value_array+1];// get next key based on searched key index 
    
    echo "Current key = ".$search_key." and current value = ".$array_same_cat[$search_key]."\n"; 
    
    echo "Next key = ".$next_key." and next value = ".$array_same_cat[$next_key]."\n"; 
    
    echo "Prev key = ".$prev_key." and prev value = ".$array_same_cat[$prev_key]."\n"; 
    

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

  • +0

    私はあなたの前に、recaptchaとispを投稿しています: '++' –

    0

    PHPは特定のキーに配列ポインタを設定する方法がありません。あなたのユースケースでは、これは動作します:

    //...some code where $array_same_cat is defined 
    $key = 'XA127'; 
    $next = null; 
    $prev = null; 
    if(isset($array_same_cat[$key])){ 
        reset($array_same_cat); //reset the array pointer to the beginning 
        //Iterate over the array, setting $key to the current array key 
        while(($key = key(current($array_same_cat))) !== null){ 
         if($key == $search){ 
          prev($array_same_cat); 
          $prev = array('key' => key($array_same_cat), 'value' => current($array_same_cat)); 
    
          next(next($array_same_cat)); 
          $next = array('key' => key($array_same_cat), 'value' => current($array_same_cat)); 
          break; 
         } 
         next($array_same_cat); 
        } 
    } 
    
    if(!empty($prev)){ 
        echo "Previous element: key=" . $prev['key'] . ', value= ' . $prev['value'] . PHP_EOL; 
    } 
    if(isset($array_same_cat[$search]){ 
        echo "current element: key=" . $search . ', value= ' . $array_same_cat[$search] . PHP_EOL; 
    } 
    if(!empty($next)){ 
        echo "Next element: key=" . $next['key'] . ', value= ' . $next['value'] . PHP_EOL; 
    } 
    

    このコードは出力何かのようになります:

    Previous element: key=SF124, value=value 
    Current element: key=XA127, value=value2 
    Next element: key=AT257, value=value3 
    

    注意、あなたがすることを避けることができるようにあなたのデータを構造化するためのより良い方法がありそうですこのようなもの。上記の方法はあまり効率的ではありません。なぜなら、探しているキーが見つかるまで、配列全体をループする必要があるからです。

    あなたの投稿をループする際に、次の値と前の値を現在の値とともに保存する方がよい場合があります。

    関連する問題