2017-07-07 29 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