Как поменять ключ во всех массивах

121
30 июня 2019, 09:10

Изучаю PHP, есть задание: реализовать функцию function($num){}, где $num – массив положительных чисел, количество элементов кратно 3.
Результат ее выполнение: двумерный массив (массив состоящий из ассоциативных массива с ключами a, b, c).
Пример для входных массива:

[1, 2, 3, 4, 5, 6] 

результат

[['a' => 1, 'b' => 2, 'с' => 3],
 ['a' => 4, 'b' => 5, 'c' => 6]]

<?php 
$num = 5; 
function createTrapez($num) 
$keys = array('a','b','c'); 
$arr = array(); 
$arr = range(0, $num); 
$ct = count($arr); 
if(($ct%3==0)&&($a>=0)) 
{ 
	$values = array_chunk($arr, 3); 
foreach ($values as $item =>$array) { 
    ${"array{$item}"} = $array; 
$c = array_combine($keys, $array); 
print_r($c); 
} 
	else  
echo "Количество элемнтов не кратно 3 или числа отрицательно"; 
} 
?>

Происходит замена ключей только в последнем массиве, как сделать, чтобы ключи поменялись во всех массивах?

Answer 1

просто бейте на 3 и соединяйте с ключами.

$data = [1, 2, 3, 4, 5, 6] ;
$result = array_map(function($v){
                 return array_combine(['a','b','c'], $v);
             }, array_chunk($data, 3));
Answer 2
$array = [1, 2, 3, 4, 5, 6];
var_dump(fun($array));
function fun($array){
    if(count($array) % 3 !== 0){
        return false;
    }
    $arrays = array_chunk($array, 3);
    $array_keys = ["a", "b", "c"];
    $new_array = [];
    foreach($arrays as $array){
        $new_array[] = array_combine($array_keys, $array);
    }
    return $new_array;
}

Результат:

array(2) {
  [0]=>
  array(3) {
    ["a"]=>
    int(1)
    ["b"]=>
    int(2)
    ["c"]=>
    int(3)
  }
  [1]=>
  array(3) {
    ["a"]=>
    int(4)
    ["b"]=>
    int(5)
    ["c"]=>
    int(6)
  }
}
READ ALSO
Не получается взять текст из QTextEdit

Не получается взять текст из QTextEdit

Прикрепил к изменению текста QTextEdit

162
Бесконечный цикл для индекса типа std::size_t

Бесконечный цикл для индекса типа std::size_t

Почему не работает цикл вида:

156
DICOM Orthanc. Text Value Attribute(0040,A160)

DICOM Orthanc. Text Value Attribute(0040,A160)

Имеется orthanc-server и проект на C++ с использованием Grassroots DICOMНа сервере имеется запись instance c Text Value Attribute(0040,A160)

134