在循环之前显示数组中的元素

时间:2016-05-25 11:15:28

标签: php arrays

在显示object的其余部分之前,我需要显示array中的某个array

数组如下所示:

Array
(
    [0] => stdClass Object
        (
            [template_id] => 91
            [template_name] => Alphabet
            [template_thumbnail] => blank-template-thumbnail.jpg
            [template_create_date] => 1456821665
            [template_customer_id] => 0
            [template_is_responsive] => no
            [template_type] => builder
            [template_category] => simple
            [sort] => 2
        )

    [1] => stdClass Object
        (
            [template_id] => 92
            [template_name] => Blank Template
            [template_thumbnail] => blank-template-thumbnail.jpg
            [template_create_date] => 1456821670
            [template_customer_id] => 0
            [template_is_responsive] => no
            [template_type] => builder
            [template_category] => simple
            [sort] => 2
        )

    [2] => stdClass Object
        (
            [template_id] => 31
            [template_name] => Holiday Specials
            [template_thumbnail] => accommodation-1-20110926.jpg
            [template_create_date] => 1456821660
            [template_customer_id] => 0
            [template_is_responsive] => no
            [template_type] => builder
            [template_category] => Accommodation
            [sort] => 3
        )
)

我需要先显示Blank Template,然后按字母顺序显示其余部分(现在的顺序。

是否有比两次循环数组更优雅的解决方案?数组的大小可以是1(空白模板)到无数对象。

3 个答案:

答案 0 :(得分:1)

$str="";
for($i=0;$i<=count($arr);$i++){
   if($arr[$i]['template_name'] == "Blank Template"){
         echo $arr[$i]['template_name'];
   }else{
         $str .= $arr[$i]['template_name']. "<br>";
   }
}

echo $str;

答案 1 :(得分:0)

试试这个:

$firstItem = null;
$outArray = [];
foreach($yourArray as $item){
    if($item->template_name == 'Blank Template'){
        $firstItem = $item;
    }else{
        $outArray[$item->template_name] = $item;
    }
}
ksort($outArray,SORT_STRING);
array_unshift($outArray,$firstItem);

只需一个循环。注意这种做事方式,只要你在template_name上有唯一性就行了!

希望它有所帮助。

答案 2 :(得分:0)

这对您有用,请尝试

<?php 
$dataArray = array(0=>array('template_id'=>91,'template_name'=>'Alphabet'),
                   1=>array('template_id'=>92,'template_name'=>'Blank Template'),
                   2=>array('template_id'=>31,'template_name'=>'Holiday Specials')
                 );

$newArray = array();

foreach($dataArray as $key => $val)
{
    if(in_array('Blank Template',$val))///find the key for black template
    {
        unset($dataArray[$key]); ///unset black temp from original array
        $newArray[] = $val;///push black temp into new array at 0 index
        foreach($dataArray as $k => $v)
        {
            $newArray[] = $v; ///push the renaming values into new array 
        }
    }
}
echo "<pre>"; print_r($newArray);

?>

这会给你:

Array
(
    [0] => Array
        (
            [template_id] => 92
            [template_name] => Blank Template
        )

    [1] => Array
        (
            [template_id] => 91
            [template_name] => Alphabet
        )

    [2] => Array
        (
            [template_id] => 31
            [template_name] => Holiday Specials
        )

)

现场示例:CLICK HERE