2014-10-23 4 views
0

У меня есть массив, который выглядит следующим образомрода multidementional массив alpahbetically в 2 колонки

Array ([0] => Array ([make] => Alfa Romeo [id] => 2) 
     [1] => Array ([make] => Aston Martin [id] => 3) 
     [2] => Array ([make] => Audi [id] => 4) 
     [3] => Array ([make] => BMW [id] => 8) 
     [4] => Array ([make] => Caterham [id] => 9) 
    ) 

я мог бы сортировать его вертикально в 2 колонки

так будет выглядеть следующим образом

Alfa Romeo  BMW 
Aston Martin Caterham 
Audi 

прямо сейчас это выглядит, когда Yii генерирует флажок, используя функцию checkBoxList()

Alfa Romeo Aston Martin 
    Audi   BMW 
    Caterham 

прямо сейчас у меня есть это для сортировки. но это работает только с 1 одномерных массивов

function array_chunk_vertical($data, $columns = 2) { 
    $n = count($data) ; 
    $per_column = floor($n/$columns) ; 
    $rest = $n % $columns ; 

    // The map 
    $per_columns = array() ; 
    for ($i = 0 ; $i < $columns ; $i++) { 
     $per_columns[$i] = $per_column + ($i < $rest ? 1 : 0) ; 
    } 

    $tabular = array() ; 
    foreach ($per_columns as $rows) { 
     for ($i = 0 ; $i < $rows ; $i++) { 
      $tabular[$i][ ] = array_shift($data) ; 
     } 
    } 

    return $tabular ; 
} 

ответ

1

Там нет ничего о существующей функции, которая предотвращает его использование на п-мерный массив. Фактически, функция, которую вы показываете здесь, gives exactly the desired output с использованием предоставленного ввода.

Output from eval.in

<?php 

function array_chunk_vertical($data, $columns = 2) { 
    $n = count($data) ; 
    $per_column = floor($n/$columns) ; 
    $rest = $n % $columns ; 

    // The map 
    $per_columns = array() ; 
    for ($i = 0 ; $i < $columns ; $i++) { 
     $per_columns[$i] = $per_column + ($i < $rest ? 1 : 0) ; 
    } 

    $tabular = array() ; 
    foreach ($per_columns as $rows) { 
     for ($i = 0 ; $i < $rows ; $i++) { 
      $tabular[$i][ ] = array_shift($data) ; 
     } 
    } 

    return $tabular ; 
} 


$cars = [ 
    [ 'make' => 'Alfa Romeo', 'id' => 2 ], 
    [ 'make' => 'Aston Martin', 'id' => 3 ], 
    [ 'make' => 'Audi', 'id' => 4 ], 
    [ 'make' => 'BMW', 'id' => 8 ], 
    [ 'make' => 'Caterham', 'id' => 9 ], 
]; 

echo '<table>'; 
foreach(array_chunk_vertical($cars) as $row) { 
    echo '<tr>'; 
    foreach($row as $car) { 
     echo '<td><input type="checkbox" value="', $car['id'], '" />', $car['make'], '</td>'; 
    } 
    echo '</tr>'; 

} 
echo '</table>'; 
+0

OMG спасибо, отсутствие сна. не заметил мой 'foreach (array_chunk_vertical ($ cars) как $ row) {}' было сделано неправильно. думал, что это моя функция «array_chunk_vertical». Благодаря!! – user2636556

0

В этом случае вы должны добавить данные в новый один размерности array.Try что-то вроде следующего

$a = array(0 => array('make' => 'Alfa Romeo', 'id' => 2), 
     1 => array('make' => 'Aston Martin', 'id' => 3), 
     2 => array('make' => 'Audi', 'id' => 4), 
     3 => array('make' => 'BMW', 'id' => 8), 
     4 => array('make' => 'Caterham', 'id' => 9) 
); 
    $b=array(); 
    foreach ($a as $v) 
    { 
    $b[]=$v['make'];  
    } 
    sort($b); 
    print_r($b); 

Затем вы можете использовать вашу рабочую функцию прохождения новый массив в качестве параметра.

0

попробовать это, сложите сом condtions, чтобы отобразить в два столбца

<?php $sort=Array ( 
    0 => Array ('make' => 'Alfa Romeo' ,'id' => 2), 
    1 => Array ('make' => 'Aston Martin' ,'id' => 3) , 
    2 => Array ('make' => 'Audi' ,'id' => 4), 
    3 => Array ('make' => 'Caterham' ,'id' => 8), 
    4 => Array ('make' => 'BMW' , 'id' => 9) 
); 
    print_r($sort); 
    sort($sort); echo ' <br/>'; 
    print_r($sort); 
    ?> 
+0

Вы можете удалить print_r, так как я использую их, чтобы показать результаты до и после –

Смежные вопросы