Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于元素位置创建新数组_Php_Arrays - Fatal编程技术网

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);
}