2017-10-04 51 views
0

上使用自定义关键字值而不是增量 如何使用自定义关键字在php

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

现在我正在努力的是搜索具有键值(XA127)的上一个键和下一个键及其值。

这里之下产生的数组代码:

$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,我发现我的元素的确切位置。现在我必须找到如何做prev和next。

foreach($array_same_cat as $ar){ 
    if($ar == $array_same_cat[$current_sku]){ 
     echo 'found'; 
    } 
} 

回答

2

我从你的问题怎样理解: -

  1. 你有阵

  2. 你有钥匙,你要在数组搜索,然后你需要找到出上一个值和下一个值

现在你可以像下面这样做: -

<?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 

注意,有可能是一个更好的方式来组织你的数据,这样你可以避免做像这样的东西。上面的方法效率不高,因为它要求您遍历整个数组,直到找到所需的密钥。

更好的方法可能涉及在循环访问帖子时存储下一个值和前一个值以及当前值。

相关问题