2017-07-07 28 views
0

我有一个大类阵列结构PHP array_search - 正确的方式来获得价值

[0] => WP_Term Object ([term_id] => 1028 
[name] => Sale woman 
[slug] => sale-woman 
[term_group] => 0 
[term_taxonomy_id] => 1028) 

[1] => WP_Term Object ([term_id] => 1029 
[name] => Sale man 
[slug] => sale-man 
[term_group] => 0 
[term_taxonomy_id] => 1029)... 

我不需要那么多的价值,我只显示该阵列的一部分()。所以,我从这个数组

$ids = array(); 
$i = 0; 
foreach ($cats as $key=>$cat) { 

$ids[$i]['id'] = $cat->term_id; 
$ids[$i]['catname'] = $cat->name; 
$i++; 

} 

它运作良好,并返回我

Array ([0] => Array ([id] => 1028 [catname] => Sale woman) 
[1] => Array ([id] => 1029 [catname] => Sale man))... 

比我需要找到当前类别该数组中,并得到下一个和类别分组的ID创建自己的数组。我尝试

$thisindex = array_search($this_category_id, $ids['id']); 

$previd = $ids[ $thisindex - 1 ]; 

$nextid = $ids[ $thisindex + 1 ]; 

但是,当我尝试ECHO $ previd或$ nextid它什么也没有返回。 $this_category_id效果很好,我认为问题出在array_search($this_category_id, $ids['id']);

我尝试也$编号[] [ '身份证'] - 导致错误

$ IDS [$ i] [ '身份证'] - 没有返回

如何找到$previd$nextid?需要帮助

+0

您将获得'$ ids ['id']的索引您需要一个ID数组 – ArtisticPhoenix

+0

我没有看到通过将原始数组转换为您的'$ ids'数组实际实现了什么除了转动一个完美将可用的对象数组转换为数组数组并浪费时间和内存块的过程 – RiggsFolly

回答

0

试试这个

$array = array_column($ids, 'id'); //array of ID 
$thisindex = array_search($this_category_id, $array); 

或者自己在foreach

$ids = array(); 
$array = array(); 
$i = 0; 
foreach ($cats as $key=>$cat) { 

    $ids[$i]['id'] = $cat->term_id; 
    $ids[$i]['catname'] = $cat->name; 
    $array[$i] = $cat->term_id; 
    $i++; 

} 

建立一个或者你可以编写自己的搜索功能。

你的阵列看起来像这样

[ 
    0 => [ 'id' => 1, ..], 
    1 => [ 'id' => 2, ..], 
] 

但搜索是这样

['id' => [....]] 

好,除了有顶阵列中没有id,只是01等即使有是,id不是数组的类型,而是可能和Int。

UPDATE

为了使阵列循环,你必须检查,如果你开始之前和结束这样的后:

$previd = $ids[ $thisindex - 1 ]; 
$nextid = $ids[ $thisindex + 1 ]; 
$min = 0; 
$max = count($ids) - 1; 

if($previd < $min) $previd = $max; 
if($nextid > $max) $nextid = $min; 

如果小于0则等于数组的数量 - 1(结束),如果它超过了结尾,那么它等于开始或(0)在这种情况下。

+0

Yeap !!!它的工作原理... oNE更多的问题 - 元素$ thisindex是第一个,它不显示$ previd。是否可以显示最后一个元素? –

+0

yes,'if($ previd <0){end($ array); $ previd = key($ array);}'或者你可以使用'end($ id)'并返回最后一项。或'count($ id) - 1',你会在数组的最后有相同的问题 – ArtisticPhoenix