PHP搜索多维数组的值,然后将该元素放在数组的开头

时间:2012-04-05 11:06:38

标签: php arrays usort

我需要搜索这个数组:

cars - 
      [0] -make : Ford
          -model: Escort
          -year: 1991

      [1] -make: Honda
          -model: Civic
          -year: 1996

      [2] -make: Vauxhall 
          -model: Astra
          -year: 1972

如果(例如)模型是“思域”,则将“汽车”放在第0位。

所以结束数组就像:

cars - 
      [0] -make: Honda
          -model: Civic
          -year: 1996

      [1] -make : Ford
          -model: Escort
          -year: 1991        

      [2] -make: Vauxhall 
          -model: Astra
          -year: 1972

我尝试了一些改变:

  function typeSort($a, $b)
    {
        if ($a['model'] == 'Civic' )
        {
            return 0;
        }
        return ($a['model'] < $b['model']) ? -1 : 1;
    }

但这只是返回1

4 个答案:

答案 0 :(得分:1)

你的意思是:


function sortByModel($a, $b) {
    if($a["model"] == "Civic") {
        return 0;
    }
    else {
        return 1;
    }       
}
usort($a, 'sortByModel');
echo "<pre>";
print_r($a);

答案 1 :(得分:0)

或者这可能是你想要的(输出至少是你想要的)

foreach($cars as $k => $v){
    if ($v['model'] == 'Civic'){
        unset($cars[$k]);
        array_unshift($cars, $v);
    }
}

答案 2 :(得分:0)

<?php
$cars = array(
    0=>array(
        'make' => 'Ford'
        ,'model' => 'Escort'
        ,'year' => 1991
    )
    ,1=>array(
        'make' => 'Honda'
        ,'model' => 'Civic'
        ,'year' => 1996
    )
    ,2=>array(
        'make' => 'Vauxhall'
        ,'model' => 'Astra'
        ,'year' => 1972
    )
);

var_dump("BEFORE",$cars);
var_dump("AFTER",array_typesort($cars));

function array_typesort( $arr, $model='Civic' ) {
    foreach ( $arr as $k => $v ) {
        if ( $arr[$k]['model'] == $model ) {
            $out = array_splice( $arr, $k, 1 );
            array_unshift($arr, $out[0]);
            return $arr;
        }
    }
}
?>

答案 3 :(得分:0)

你可以试试这个:

function typesort($arr, $val)
{

foreach($arr as $key=>$value)
{
    if(in_array($val,$value))
    {
        $tempArr = $value;
        unset($arr[$key]);
        break;
    }
}
array_unshift($arr,$tempArr);
return $arr;
}

print_r(typesort($data,'bbb'));