我有一些0-1元素的数组,如:
array('0,0'=>0,'1,0'=>0,'2,0'=>0,'3,0'=>1,'0,1'=>1,'1,1'=>1,'2,1'=>0,'3,1'=>0,'0,2'=>1,'1,2'=>1,'2,2'=>1,'3,2'=>1);
看起来像:
0 0 0 1
1 1 0 0
1 1 1 1
如何查找1的所有岛屿?
在这种情况下,我想返回值:
$island[] = array('3,0');
$island[] = array('0,1','1,1','0,2','1,2','2,2','3,2');
当然,在实际案例中会有更多扩展。
提前致谢。
答案 0 :(得分:0)
你可以在另一个foreach中使用foreach来搜索数组的值为1,如下所示:
<?php
$array=array(
array(0,0,0,1),
array(1,1,0,0),
array(1,1,1,1)
);
$island=array();
foreach($array as $x=>$arr)
{
foreach($arr as $y=>$val)
{
if($val==1)
{
$island[]=array($x, $y);
}
}
}
print_r($island);
?>
输出:
Array
(
[0] => Array
(
[0] => 0
[1] => 3
)
[1] => Array
(
[0] => 1
[1] => 0
)
[2] => Array
(
[0] => 1
[1] => 1
)
[3] => Array
(
[0] => 2
[1] => 0
)
[4] => Array
(
[0] => 2
[1] => 1
)
[5] => Array
(
[0] => 2
[1] => 2
)
[6] => Array
(
[0] => 2
[1] => 3
)
)
此输出查找所有索引1并将它们作为数组中的单个条目返回。
您也可以使用:
<?php
$array=array(
array(0,0,0,1),
array(1,1,0,0),
array(1,1,1,1)
);
$island=array();
$temp=array();
foreach($array as $x=>$arr)
{
foreach($arr as $y=>$val)
{
if($val==1)
{
$temp[]="'".$x.','.$y."'";
}
}
if(count($temp)>0)
{
$island[]=implode(',',$temp);
}
$temp=array();
}
print_r($island);
?>
这将使阵列更接近您所需的输出:
Array
(
[0] => '0,3'
[1] => '1,0','1,1'
[2] => '2,0','2,1','2,2','2,3'
)
答案 1 :(得分:0)
$islands = [
[0, 0, 0, 1],
[1, 1, 0, 0],
[1, 1, 1, 1],
];
$result = [];
array_walk_recursive(
$islands,
function ($value, $key) use (&$result) {
static $c = PHP_INT_MAX;
static $r = -1;
if ($c >= $key) {
++$r;
$c = $key;
}
if ($value)
$result[] = $key . ',' . $r;
}
);
var_dump($result);