我有一个二维PHP数组(矩阵)。
无论如何从这个矩阵中提取(回显或保存到另一个变量)一行或一列而不迭代这些元素?
假设我们有这个矩阵:
A A A B
A A A C
A B C D
我想做类似的事情:
display_and_cut_first_line()
//Matrix after this step:
A A A C
A B C D
display_and_cut_last_column()
//Matrix after this step:
A A A
A B C
它只需要用于边缘元素(第一行/最后一行,第一列/最后一列)。 我想用某种方式使用切片,但没有设法做到这一点。
答案 0 :(得分:6)
提取行很简单:array_pop
(最后一行)和array_shift
(第一行)为您执行此操作。
使用array_column
在PHP 5.5上轻松提取列。对于早期版本,必须使用array_map
或array_walk
以及弹出/移位功能手动完成,依次对每行进行操作:
function extract_last_column(&$array) {
$column = array();
array_walk($array, function(&$row) use(&$column) {
$column[] = array_pop($row);
});
return $column;
}
<强> See it in action 强>
如果需要,您可以使用array_slice
代替array_pop
和array_shift
来概括这一点 - 但对于这些特定操作,它会更慢。
答案 1 :(得分:1)
<?php
$example = array();
$example[0][0] = 'A';$example[0][1] = 'A';$example[0][2] = 'A';$example[0][3] = 'B';
$example[1][0] = 'A';$example[1][1] = 'A';$example[1][2] = 'A';$example[1][3] = 'C';
$example[2][0] = 'A';$example[2][1] = 'B';$example[2][2] = 'C';$example[2][3] = 'D';
$example = display_and_cut_first_line($example);
print_r($example);
/* Array
(
[0] => Array
(
[0] => A
[1] => A
[2] => A
[3] => C
)
[1] => Array
(
[0] => A
[1] => B
[2] => C
[3] => D
)
)
*/
$example = display_and_cut_last_column($example);
print_r($example);
/* Array
(
[0] => Array
(
[0] => A
[1] => A
[2] => A
)
[1] => Array
(
[0] => A
[1] => B
[2] => C
)
)
*/
function display_and_cut_first_line($array){
array_shift($array);
return ($array);
}
function display_and_cut_last_column($array){
$result = array();
foreach($array as $data):
array_pop($data);
$result[] = $data;
endforeach;
return $result;
}
?>
答案 2 :(得分:0)
是。要获得第一行:
$arr[0];
获取最后一栏:
$keys = array_keys($arr);
array_column($arr, end($keys));
答案 3 :(得分:-2)
晴。
可以使用array_splice()来剪切一行。
“列”在数组实现中不是可识别的条目,因此您必须至少迭代行,可能使用array_map()。