Переместить элемент в конец массива

у меня есть массив, который содержит список значений pagrank. Рассмотрим ниже массив:

Array
(
    [0] => stdClass Object
        (
            [pagerank] => 3
        )

    [1] => stdClass Object
        (
            [pagerank] => 1
        )

    [2] => stdClass Object
        (
            [pagerank] => R
        )

    [3] => stdClass Object
        (
            [pagerank] => 2
        )

    [4] => stdClass Object
        (
            [pagerank] => 7
        )

)

Я хочу переместить / переместить ранг страницы с помощью "R", например:

[2] => stdClass Object
        (
            [pagerank] => R
        )

до конца массива, и он должен быть на последнем индексе массива?

Edit: ключ массива неизвестен.

9 ответов


Если индекс неизвестен:

foreach($array as $key => $val) {
    if($val->pagerank == 'R') {
        $item = $array[$key];
        unset($array[$key]);
        array_push($array, $item); 
        break;
    }
}

$item = $array[2];
unset($array[2]);
array_push($array, $item); 

что-то вроде этого?

$var = array(
    'name' => 'thename',
    'title' => 'thetitle',
    'media' => 'themedia'
);

// Remove first element (the name)
$name = array_shift($var);
// Add it on to the end
$var['name'] = $name;

var_dump($var);

/*
array(3) {
  ["title"]=>
  string(8) "thetitle"
  ["media"]=>
  string(8) "themedia"
  ["name"]=>
  string(7) "thename"
}
*/

Ref:http://forums.phpfreaks.com/topic/177878-move-array-index-to-end/


    $item=null;
    foreach ($array['pagerank'] as $key => $value) 
    {
     if( $value=="R")
     {
     $item = $array[$key];
     unset($array[$key]);
     break;
     }
    }
     if($item !=null)
     array_push($array, $item);

попробуйте это :

$arr  = array(array("pagerank" => 3),
              array("pagerank" => 1),
              array("pagerank" => 'R'),
              array("pagerank" => 4),
              array("pagerank" => 7),
              array("pagerank" => 5),
              array("pagerank" => 2)
        );

foreach($arr as $key=>$ar){
   if($ar["pagerank"] == "R"){
     $unset  = $key;
     break;
   }
}

$val    = $arr[$unset];
unset($arr[$unset]);
$arr[]  = $val; 

print_r($arr);

Если то, что вы ищете, является именно значением r, вы можете использовать array_search

array_search возвращает ключ, если элемент существует в массиве, в противном случае возвращает false.

$needle = "R";
if($key = array_search($needle, $pageRankArray)) {
   unset($pageRankArray[$key]); // Delete an item from the array
   array_push($pageRankArray, $needle); // inserts element at the end of the array
}

Если вы хотите поместить R в качестве последнего значения и сохранить ключи, вы можете сделать следующее:

$arr = array(
    (object)array('pagerank' => 1),
    (object)array('pagerank' => 'R'),
    (object)array('pagerank' => 2),
);

// Store in temp var.
$tmp_arr = $arr;

// Sort temp array to put 'R' in top.
asort($tmp_arr);

// Reset to be able to find the first key in the sorted array.
reset($tmp_arr);

// Get key from first value in array.
$key = key($tmp_arr);

// Store value from first key.
$item = $tmp_arr[$key];

// Unset key from original array.
unset($arr[$key]);

// Insert as last value in original array using original key.
$arr[$key] = $item;

// Print result.
var_dump($arr);

это даст вам:

array(3) {
  [0]=>
  object(stdClass)#1 (1) {
    ["pagerank"]=>
    int(1)
  }
  [2]=>
  object(stdClass)#3 (1) {
    ["pagerank"]=>
    int(2)
  }
  [1]=>
  object(stdClass)#2 (1) {
    ["pagerank"]=>
    string(1) "R"
  }
}

см.:http://codepad.org/gPhrktuJ


foreach ($arr as $key => $value){
    if ($value->pagerank == 'R'){
        $arr[] = $value;
        unset($arr[$key]);
        break;
    }
}
$arr = array_values($arr);

Если у вас есть более одного объекта со значением 'R':

$current_array = $sorted_array = Array(
    ...
);
foreach($current_array as $current_key => $element){
    if($element->pagerank == 'R'){
        unset($sorted_array[$current_key]);
        $sorted_array[] = $element;
    }
}
unset($current_array);