PHP array_search - 获取值的正确方法

时间:2017-07-07 08:33:25

标签: php arrays

我有一个结构

的大型CATEGORIES数组
[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 ) )...

我需要在此数组中找到当前类别并获取下一个类别的上一个类别。我试试

$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 [] [' id'] - 导致错误

$ ids [$ i] [' id'] - 没有任何回报

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

1 个答案:

答案 0 :(得分: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。

<强> 更新

要使数组循环,你必须检查你是否在开始之前和结束之后是这样的:

$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)在这种情况下。