所以我有一個整數值的集合,它是根據每次可以有不同值的另一個函數的結果構建的。考慮PHP如下:用陣列中的值替換周圍的空值,0
$arr = [0,0,2,2,0,0,0,3,3];
,我需要轉換爲:
$newArr = [null,0,2,2,0,null,0,3,3];
我想做到的是:如果一個值> 0,它的鄰國應爲0,其餘應該爲空。
這裏最好的策略是什麼?
所以我有一個整數值的集合,它是根據每次可以有不同值的另一個函數的結果構建的。考慮PHP如下:用陣列中的值替換周圍的空值,0
$arr = [0,0,2,2,0,0,0,3,3];
,我需要轉換爲:
$newArr = [null,0,2,2,0,null,0,3,3];
我想做到的是:如果一個值> 0,它的鄰國應爲0,其餘應該爲空。
這裏最好的策略是什麼?
與運算符優先級播放:
$zero = true;
$arr = [0,0,2,2,0,0,0,3,3];
$newArr = [];
foreach($arr as $k=>$v) {
if ($v) {
$newArr[] = $v;
$zero = false;
} else {
if ($zero and isset($arr[$k+1]) && !$arr[$k+1] || !isset($arr[$k+1]))
$newArr[] = null;
else
$newArr[] = 0;
$zero = true;
}
}
print_r($newArr);
這按預期工作,謝謝! – krikkaa
通過整個陣列循環,我們評估了三個條件的每個元素:
1.Element爲零。
2.先前設置了元素,它等於零或爲空。
3.設置下一個元素,它等於零或爲空。
<?php
foreach($array as $key => $element)
{
if($element == 0 && ((isset($array[$key - 1]) && !$array[$key - 1]) || (isset($array[$key + 1]) && !$array[$key + 1])))
{
$array[$key] = null;
}
}
?>
我認爲它應該爲你工作:
<?php
$arr = [0,0,2,2,0,0,0,3,3];
$new_array = $arr;
$array_count = count($arr);
for ($i=0; $i<$array_count; $i++) {
if ($i == 0 && $arr[$i+1] == 0) {
$new_array[$i] = null;
} elseif ($i == ($array_count-1) && $arr[$i-1] == 0) {
$new_array[$i] = null;
} elseif ($arr[$i-1] == 0 && $arr[$i+1] == 0) {
$new_array[$i] = null;
}
}
echo "<pre>";
print_r($new_array);
?>
爲什麼OP應該「嘗試這個」?A ***好的答案***總是會解釋做了什麼以及爲什麼要做這樣的方式,不僅對於OP,而且對於未來的訪問者來說也是如此。 –
我們需要檢查三個條件:有,前值。是零而下一個是零。 您可以將前兩個條件合併爲第三個條件。 爲簡單起見,將其分解。
$array = [0,0,2,2,0,0,0,3,3];
$newArray = [];
foreach ($array as $key => $val) {
$previous = NULL;
$next = NULL;
if (isset($array[$key + 1])) {
$next = $array[$key + 1];
}
if ($key != 0) {
$previous = $array[$key - 1];
}
if ($val === 0 && $next == 0 && $previous == 0) {
$newArray[] = 'NULL';
} else {
$newArray[] = $val;
}
}
另一種方式來做到這一點:
$arr = [0,0,2,2,0,0,0,3,3];
foreach($arr as $key => $value){
if($arr[$key] > 0 && isset($arr[$key - 1]) && $arr[$key - 1] == 0){
if(isset($arr[$key - 2]) && $arr[$key - 2] == 0){
$arr[$key - 2] = null;
}
}
if($arr[$key] > 0 && isset($arr[$key + 1]) && $arr[$key + 1] == 0){
if(isset($arr[$key + 2]) && $arr[$key + 2] == 0){
$arr[$key + 2] = null;
}
}
}
echo '<pre>';
print_r($arr);
echo '</pre>';
在這裏,我尋找的正值第一然後檢查,如果鄰居是0,則設置鄰居的鄰居爲空。
<?php
$arr = [0,0,2,2,0,0,0,3,3];
$extra = [];
for($x=0; $x<count($arr); $x++){
if($arr[$x] == 0){
$tmp = isset($tmp)?$tmp:[];
$tmp[]=$x;
}else{
if(isset($tmp)){
$extra[] = $tmp;
unset($tmp);
}
}
}
foreach($extra as $subArr){
if(count($subArr) == 2){
$arr[$subArr[0]] = null;
$arr[$subArr[1]] = 0;
}else if(count($subArr) == 3){
$arr[$subArr[0]] = 0;
$arr[$subArr[1]] = null;
$arr[$subArr[2]] = 0;
}
}
var_dump($arr);
// YIELDS::
array (size=9)
0 => null
1 => int 0
2 => int 2
3 => int 2
4 => int 0
5 => null
6 => int 0
7 => int 3
8 => int 3
回答以下:)它應該爲你工作。 –
非常感謝您的寶貴意見,我已經接受了@Casimir et Hippolyte幫助最大的答案。保持! – krikkaa
你總是可以投票給那些工作太多;)謝謝! –