2017-08-26 8 views
2

私は連想配列技術を採用しなければならないフォームを作っています。ユーザは製品サイズを選択し、対応する在庫を入力する。 1回転記すると対応する在庫は対応するサイズ値に関連付けられます。ここ は形式です:phpのフォームに連想配列テクニックを適用するにはどうしたらいいですか?

<form action="test1.php" method="post"> 
    <p>Choose a Size or more and enter its Stock</p> 
    Size :<select name="articleSize[]" id="articleSize[]"> 
     <option value="">Select a size</option> 
     <option value="xl">XL</option> 
     <option value="32">32</option> 
     <option value="unique">Unique</option> 
     <option value="xxl">XXL</option> 
    </select> 
    Stock : <input type="text" name="articleStock[]" id="articleStock[]" size="8" id="stock" value=""> 

    <p>Choose a Size or more and enter its Stock (optional)</p> 
    Size :<select name="articleSize[]" id="articleSize[]"> 
     <option value="">Select a size</option> 
     <option value="xl">XL</option> 
     <option value="32">32</option> 
     <option value="unique">Unique</option> 
     <option value="xxl">XXL</option> 
    </select> 
    Stock : <input type="text" name="articleStock[]" id="articleStock[]" size="8" id="stock" value=""> 
    <p> 
    <input type="submit" name="submit" id="submit" value="submit"> 
    </p> 
    </form> 

私が知っているし、ここに私のコードが何であるかに基づいて自分を試してみました:

if (isset($_POST['submit'])) { 
$arrSize = $_POST['articleSize']; 
$arrStock = $_POST['articleStock']; 

foreach ($arrSize as $size_key => $sizeValue) { 
    foreach ($arrStock as $stock_Key => $stockVal) { 
     if ($size_key == $stock_Key) { 
      $newArray[$sizeValue] = $stockVal; 
     } 
    } 

} 
if (count($newArray) >=1) { 
    foreach ($newArray as $key => $value) { 
     echo "Size is ".$key. " and stock is ".$value; 
    } 
    } 

} 

私のコードは除外として働いていたがそこに行うには良い方法をis'tされますそれ?

結果は似ています。

$stock_size = array(the size=> its corresponding stock); 

答えて

1

あなたはこのようなインナーforeach排除することができます:あまりにもすることができます0値をカウントする必要がある場合

foreach ($arrSize as $size_key => $sizeValue) { 
    if (!empty($arrStock[$size_key])) { 
     $newArray[$sizeValue] = $arrStock[$size_key]; 
    } 
} 

を:

foreach ($arrSize as $size_key => $sizeValue) { 
    if (!empty($arrStock[$size_key]) && (int)$arrStock[$size_key] >=0) { 
     $newArray[$sizeValue] = $arrStock[$size_key]; 
    } 
} 

をそして、あなたはすべての値その確信している場合ペアを持つ:

foreach ($arrSize as $size_key => $sizeValue) { 
    $newArray[$sizeValue] = $arrStock[$size_key]; 
} 
機能付き

$newArray = array_combine($arrSize, $arrStock); 

更新と同じである

function makePairs($arrSize, $arrStock) 
{ 
    $newArray = []; 

    foreach ($arrSize as $size_key => $sizeValue) { 
     if (!empty($arrStock[$size_key])) { 
      $newArray[$sizeValue] = $arrStock[$size_key]; 
     } 
    } 

    return $newArray; 
} 

// Call like 
print_r(makePairs($_POST['articleSize'], $_POST['articleStock'])); 
+0

感謝を作成します...それは私が望むように働いて...私は空の値を含む配列を返すしたくない... –

+0

上記を関数としてどのように変換できますか?戻り値は関数なので? –

+0

別の質問をしてください。「関数として変換する」という意味がわかりません。 –

0

を使用できarray_combinekey-valueペアの配列をあなたの助言のための

$arrSize = $_POST['articleSize']; 
$arrStock = $_POST['articleStock']; 

$stock_size = array_combine ($arrSize ,$arrStock); 
関連する問題