我有一个像这样的数组
$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。所以上面的数组应该变成
$dataArrayOutput = array(
array( 1, 1, 0 ),
array( 1, 0, 1 ),
array( 1, 1, 0 ),
array( 1, 0, 0 ),
array( 1, 0, 0 )
);
实现此目标的最佳方法是什么?目前我正在尝试
foreach ($dataArray as $data) {
foreach ($data as $key => $value) {
if($value > 1999) {
$value = 1;
} else {
$value = 0;
}
}
}
但是似乎没有什么改变。我该如何实现自己的追求?
谢谢
答案 0 :(得分:2)
更多的娱乐价值,但仍然是可行的选择。使用array_walk_recursive()
遍历数组结构,然后,如果该项是整数(is_int()
),它将根据它是否大于1999进行设置。如果它不是整数,则仅保留数据。
array_walk_recursive($dataArray, function (&$data) {
$data = (is_int($data))?(($data> 1999)?1:0):$data; });
答案 1 :(得分:1)
您很近。您需要在&
前面加上一个将内存地址传递给循环的地址,然后更新该值:
foreach ($dataArray as &$data) {
foreach ($data as $key => &$value) {
if($value > 1999) {
$value = 1;
} else {
$value = 0;
}
}
}
您可以在此处了解有关pass by reference
的更多信息:http://php.net/manual/en/language.references.pass.php
如果数组具有嵌套/不同级别,则可以使用如下递归函数:
function recursiveUpdateValue($item) {
if(is_array($item)) {
foreach($item as $k => $v) {
$item[$k] = recursiveUpdateValue($v);
}
return $item;
} else {
return ($item >= 2000) ? 1 : 0;
}
}
$updatedArray = recursiveUpdateValue($dataArray);
答案 2 :(得分:1)
foreach循环内的数组值通过值传递。您可以显式使用&
通过引用传递值,也可以使用键修改原始数组。试试:
foreach ($dataArray as $key_out => $data) {
foreach ($data as $key => $value) {
if($value > 1999) {
$dataArray[$key_out][$key] = 1;
} else {
$dataArray[$key_out][$key] = 0;
}
}
}
答案 3 :(得分:0)
我知道这很难读,但这只是一个简短的代码。
我使用array_intersect在您的dataArray($ da)中找到零。
然后,我将array_replace与[1,1,1]数组一起使用(通过使用array_fill),并覆盖我发现的零。
$arr = [0,0,0];
foreach($dataArray as &$da){
$da = array_replace(array_fill(0,count($da),1), array_intersect($da, $arr));
}
var_dump($dataArray);
输出
array(5) {
[0]=>
array(3) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
}
[1]=>
array(3) {
[0]=>
int(1)
[1]=>
int(0)
[2]=>
int(1)
}
[2]=>
array(3) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
}
[3]=>
array(3) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
}
[4]=>
&array(3) {
[0]=>
int(1)
[1]=>
int(1)
[2]=>
int(0)
}
}