Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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_Html_Arrays_Sorting - Fatal编程技术网

Php 使用不同的键和值对多维数组排序

Php 使用不同的键和值对多维数组排序,php,html,arrays,sorting,Php,Html,Arrays,Sorting,我有一个表单,用户可以在其中添加他们需要的所有附加字段 注意:我想找到一种更有效地组织代码的方法,稍后我会详细解释 由于它是用HTML构建的,因此我对其进行了简化,使其更易于理解: <form action="" method="post"> <h1>Products</h1> <p> <input type="text" name="product_name[]" value="Product

我有一个表单,用户可以在其中添加他们需要的所有附加字段

注意:我想找到一种更有效地组织代码的方法,稍后我会详细解释

由于它是用HTML构建的,因此我对其进行了简化,使其更易于理解:

<form action="" method="post">
    <h1>Products</h1>       
    <p>
        <input type="text" name="product_name[]" value="Product #1">
        <input type="text" name="product_sku[]" value="pro-001">
        <input type="text" name="product_price[]" value="$12.00">
        <input type="text" name="product_stock[]" value="10">
    </p>
    <p>
        <input type="text" name="product_name[]" value="Product #2">
        <input type="text" name="product_sku[]" value="pro-002">
        <input type="text" name="product_price[]" value="$12.00">
        <input type="text" name="product_stock[]" value="10">
    </p>
    <p><button type="submit">Add Product</button></p>
</form>
我希望我能收到这样的代码:

Array
(
    [0] => Array
        (
            [product_name] => Product #1
            [product_sku] => pro-001
            [product_price] => $12.00
            [product_stock] => 10
        )

    [1] => Array
        (
            [product_name] => Product #2
            [product_sku] => pro-002
            [product_price] => $12.00
            [product_stock] => 10
        )

)
我通过以下方式实现了它,但我想以一种更为优化的方式实现它

if(isset($_POST) && !empty($_POST)) {                
    // Total products to add
    $total_products = count($_POST["product_name"]);
    // Products ordered
    $products_created = [];

    for ($i=0; $i <$total_products ; $i++) {
        $products_created[$i] = array(
            'product_name' => $_POST["product_name"][$i],
            'product_sku' => $_POST["product_sku"][$i],
            'product_price' => $_POST["product_price"][$i],
            'product_stock' => $_POST["product_stock"][$i]
        );
    }

   echo "<pre>"; print_r($_POST); 
   echo "<pre>"; print_r($products_created); 
}
if(isset($\u POST)和&!empty($\u POST)){
//要添加的产品总数
$total_products=计数($_POST[“product_name”]);
//订购的产品
$products_created=[];
对于($i=0;$i$\u POST[“产品名称”][$i],
“产品库存单位”=>$\u POST[“产品库存单位”][$i],
“产品价格”=>$发布[“产品价格”][$i],
“产品库存”=>$\u POST[“产品库存”][$i]
);
}
回声“;打印(邮政美元);
回声“;打印(创建的产品);
}
完整的示例代码:


产品

添加产品

PHP中的解决方案 您可以使用
转置
功能,将
$\u POST
数据转换为所需的数据结构:

函数转置($array){
foreach($key=>$value的数组){
foreach($i=>$value的值)$result[$i][$key]=$value;
}
返回$result;
}
称为:

HTML中的解决方案 如果将HTML更改为以下格式,则可以在PHP
$\u POST
中直接获得所需的结构:


产品

添加产品

您需要一些逻辑来将序列号插入
name
属性的第一个括号对中。假设这个HTML是由PHP生成的,那么这样做并不困难。如果您的HTML在客户端是动态的,在客户端可以在不与服务器交互的情况下添加行,那么您还需要使用JavaScript来完成这项工作


我想您在设置时不会有问题。

您有权更改HTML吗?如果我有权更改HTML,但添加字段的用户无法更改。不确定是否有效,但您可以尝试以下操作:
name=“product[].name”
name=“product[].sku”
等。通常我添加javascript来动态构建后端数组,而不是依赖自动数组功能。这是一个非常好的主意非常好的解决方案,如果我能用javascript做到这一点,我会,非常感谢你的想法,上帝保佑你
if(isset($_POST) && !empty($_POST)) {                
    // Total products to add
    $total_products = count($_POST["product_name"]);
    // Products ordered
    $products_created = [];

    for ($i=0; $i <$total_products ; $i++) {
        $products_created[$i] = array(
            'product_name' => $_POST["product_name"][$i],
            'product_sku' => $_POST["product_sku"][$i],
            'product_price' => $_POST["product_price"][$i],
            'product_stock' => $_POST["product_stock"][$i]
        );
    }

   echo "<pre>"; print_r($_POST); 
   echo "<pre>"; print_r($products_created); 
}
<?php

if(isset($_POST) && !empty($_POST)) {                
    // Total products to add
    $total_products = count($_POST["product_name"]);
    // Products ordered
    $products_created = [];

    for ($i=0; $i <$total_products ; $i++) {
        $products_created[$i] = array(
            'product_name' => $_POST["product_name"][$i],
            'product_sku' => $_POST["product_sku"][$i],
            'product_price' => $_POST["product_price"][$i],
            'product_stock' => $_POST["product_stock"][$i]
        );
    }

   echo "<pre>"; print_r($_POST); 
   echo "<pre>"; print_r($products_created); 
}

 ?>

<form action="" method="post">
    <h1>Products</h1>       
    <p>
        <input type="text" name="product_name[]" value="Product #1">
        <input type="text" name="product_sku[]" value="pro-001">
        <input type="text" name="product_price[]" value="$12.00">
        <input type="text" name="product_stock[]" value="10">
    </p>
    <p>
        <input type="text" name="product_name[]" value="Product #2">
        <input type="text" name="product_sku[]" value="pro-002">
        <input type="text" name="product_price[]" value="$12.00">
        <input type="text" name="product_stock[]" value="10">
    </p>
    <p><button type="submit">Add Product</button></p>
</form>
$products_created = transpose($_POST);