Php 基于元素位置创建新数组
我有一个这样的数组Php 基于元素位置创建新数组,php,arrays,Php,Arrays,我有一个这样的数组 $dataArray = array( array( 20800, 21679, 0 ), array( 15254, 0, 3726 ), array( 17426, 2973, 0 ), array( 4391, 37, 0 ), array( 39194, 435, 0 ) ); 我正在从中创建一个子数组。任何大于2000的值都将变为1,否则将变为0 foreach ($dataArray as $row => $data
$dataArray = array(
array( 20800, 21679, 0 ),
array( 15254, 0, 3726 ),
array( 17426, 2973, 0 ),
array( 4391, 37, 0 ),
array( 39194, 435, 0 )
);
我正在从中创建一个子数组。任何大于2000的值都将变为1,否则将变为0
foreach ($dataArray as $row => $data) {
foreach ($data as $key => $value) {
if($value > 1999) {
$dataArray[$row][$key] = 1;
} else {
$dataArray[$row][$key] = 0;
}
}
}
这将产生以下结果
$dataArray = array(
array( 1, 1, 0 ),
array( 1, 0, 1 ),
array( 1, 1, 0 ),
array( 1, 0, 0 ),
array( 1, 0, 0 )
);
现在我要做的是生成另一个数组,显示1在上述数组中的位置。每一行都应该由一个新数组表示。我正在寻找的输出是
$dataArray = array(
array( 1, 2 ),
array( 1, 3 ),
array( 1, 2 ),
array( 1 ),
array( 1 )
);
所以我可以看到第1行在位置1和2有一个1,第2行在位置1和3有一个1,以此类推
我想利用我当前的循环,所以我正在尝试类似的方法
$position = array();
foreach ($dataArray as $row => $data) {
foreach ($data as $key => $value) {
if($value > 1999) {
$position[$row] = $key + 1;
$dataArray[$row][$key] = 1;
} else {
$dataArray[$row][$key] = 0;
}
}
}
但根据我的产出,这似乎有点离谱。我怎样才能实现我所追求的
谢谢您可以与以下内容一起使用:
$dataArray=[
[1, 1, 0],
[1, 0, 1],
[1, 1, 0],
[1, 0, 0],
[1, 0, 0]
];
$onePositions=数组\映射(函数($row){
返回数组_映射(函数($position){return$position+1;},数组_键($row,1));
},$dataArray);
回声';var_dump(1美元);回声';
您可以与以下内容一起使用:
$dataArray=[
[1, 1, 0],
[1, 0, 1],
[1, 1, 0],
[1, 0, 0],
[1, 0, 0]
];
$onePositions=数组\映射(函数($row){
返回数组_映射(函数($position){return$position+1;},数组_键($row,1));
},$dataArray);
回声';var_dump(1美元);回声';
填充1和0后,您可以使用函数中的第二个参数来获取位置:
填充1和0后,您可以使用函数中的第二个参数获取位置:
$position[$row][]
$position[$row][]
我最喜欢这个解决方案,因为它跳过了创建带有1和0的初始数组,谢谢从PHP5.6开始不要忘了使用短数组语法;)[]
您可以使用$key
而不是$i
我最喜欢这个解决方案,因为它跳过了创建带有1和0的初始数组,谢谢从PHP5.6开始不要忘记使用短数组语法。)[]
您可以使用$key
而不是$i
$dataArray = [
[1, 1, 0],
[1, 0, 1],
[1, 1, 0],
[1, 0, 0],
[1, 0, 0]
];
$onePositions = array_map(function($row) {
return array_map(function($position) { return $position + 1; }, array_keys($row, 1));
}, $dataArray);
echo '<pre>'; var_dump($onePositions); echo '</pre>';
<?php
$dataArray = array(
array( 20800, 21679, 0 ),
array( 15254, 0, 3726 ),
array( 17426, 2973, 0 ),
array( 4391, 37, 0 ),
array( 39194, 435, 0 )
);
$endResult = [];
foreach ($dataArray as $key => $value) {
foreach ($value as $subkey => $subvalue) {
if ($subvalue >= 2000) {
$endResult[$key][] = $subkey +1;
}
}
}
print_r($endResult);
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 1
[1] => 3
)
[2] => Array
(
[0] => 1
[1] => 2
)
[3] => Array
(
[0] => 1
)
[4] => Array
(
[0] => 1
)
)
$position = array();
$binary = array();
foreach ($dataArray as $row => $data) {
// if you want to have the positions start at 1 instead of 0
// add a dummy value to the final array
$binary[$row][] = 0;
foreach ($data as $key => $value) {
if($value > 1999) {
$binary[$row][] = 1;
} else {
$binary[$row][] = 0;
}
}
$positions[] = array_keys($binary[$row], 1);
}