2013-03-15 143 views
1

我的產品陣列 -陣列在PHP重新排列

Array 
(
    [0] => Product1 
    [1] => 
    [2] => 
    [3] => 
    [4] => Product2 
    [5] => 
    [6] => 
    [7] => Product3 
    [8] => Product4 
    [9] => Product5 
) 

Desired output -

Array 
(
    [0] => Product1 
    [1] => Product1 
    [2] => Product1 
    [3] => Product1 
    [4] => Product2 
    [5] => Product2 
    [6] => Product2 
    [7] => Product3 
    [8] => Product4 
    [9] => Product5 
) 

我的代碼嘗試 -

Array 
(
    [0] => Product1 
    [1] => Product1 
    [2] => 
    [3] => 
    [4] => Product2 
    [5] => Product2 
    [6] => 
    [7] => Product3 
    [8] => Product4 
    [9] => Product5 
) 
- 從該代碼

$i = 0; 
$newone = array(); 
for($i; $i < count($newarr); $i++) 
{ 
    if($newarr[$i] != '') 
    { 
     $newone[$i] = $newarr[$i]; 
    } 
    else 
    { 
     $newone[$i] = $newarr[$i-1]; 
    } 
} 

echo "<pre>";print_r($newone); 

輸出

讓我知道如何操縱我的代碼來實現這種數組。

回答

1
$newArray = array(); 

foreach($products as $product) 
{ 
    if($product != '') 
    { 
     $currentProduct = $product; 
    } 

    $newArray[] = $currentProduct; 
} 

print_r($newArray); 

Codepad

+1

只是一個編輯 - $ newArray [] = $ currentProduct; :)否則它只會反映最後一個元素 – Trialcoder 2013-03-15 06:21:53

+0

查看更新的答案.. :) – 2013-03-15 06:23:04

+1

是的,現在所有的好..很快就會接受.15分鐘的限制:) – Trialcoder 2013-03-15 06:23:58

1

這是我的代碼嘗試看看它

<?php 
$newarr = array('Product1','','','Product2','','','Product3','Product4','Product5'); 
$newone = array(); 
$tempValue = ''; 
foreach($newarr as $key=>$value) 
{ 
    if(($tempValue != $value) && ($value !== '')) 
    { 
     $tempValue = $value; 
    } 

    if($value != '') 
    { 
     $newone[$key] = $newarr[$key]; 
    } 
    else 
    { 
     $newone[$key] = $tempValue; 
    } 
} 

echo "<pre>";print_r($newone); 
?> 
+0

+1的另一個解決方案 – Trialcoder 2013-03-15 06:32:55

2

我猜你是在你的代碼做一個小的失誤......你在做什麼,把一個空的東西($ newone [$ i] = $ newarr [$ i-1];) here。它應該是$ newone [$ i-1]。看看here

<?php 

$newarr= Array('Product1', '', '', 'Product2', '', '', 'Product3', 'Product4', 'Product5'); 

print_r($newarr); 
$i = 0; 

$newone = array(); 
for($i; $i < count($newarr); $i++) 
{ 
    if($newarr[$i] != '') 
    { 
    $newone[$i] = $newarr[$i]; 
    } 
    else 
    { 
     $newone[$i] = $newone[$i-1]; 
    } 
} 

echo "<pre>";print_r($newone); 



?> 
+1

+1讓我知道我是什麼我做錯了:) – Trialcoder 2013-03-15 06:32:11

0

檢查這個代碼:這不使用任何循環:

$arr = array('Product1','','','','','Product2','','','Product3','Product4','Product5'); 

$i = 0; 
$assoc_arr = array_reduce($arr, function ($result, $item) use(&$i) { 
    $result[$i] = ($item == '') ? $result[$i-1] : $item; 
    $i++; 
    return $result; 
}, array()); 


echo "<pre>"; 
print_r($assoc_arr); 
+0

檢查此代碼,這不使用任何循環:) – 2013-03-15 08:32:26