首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP的数组中实现这一点

如何在PHP的数组中实现这一点
EN

Stack Overflow用户
提问于 2018-06-15 06:32:34
回答 5查看 62关注 0票数 1

我在使用数组实现此结果时遇到问题,我想用第一个数组中的数据更新另一个空数组,方法是省略前两行,将前三行添加到空数组的索引0中,然后将下三行也更新到第二个索引中,依此类推。我有这个数组

代码语言:javascript
复制
`$arr = [
    'tqty' => 9,
    'tPrice' => 18700,
    'food_name_1' => 'Black Coffee',
    'food_quanty_1' => 1,
    'food_price_1' => 1000,
    'food_name_2' => 'Sub Combo',
    'food_quanty_2' => 2,
    'food_price_2' => 3000
];`

我想使用这个数组数据,并以这种方式更新另一个空数组,删除前两行

代码语言:javascript
复制
$arr2 = [
    0 => [
         'food_name_1' => 'Black Coffee',
         'food_quanty_1' => 1,
        'food_price_1' => 1000
    ],
   1 => [
         'food_name_2' => 'Sub Combo',
         'food_quanty_2' => 2,
        'food_price_2' => 3000

    ]

];

到目前为止,以下是我的代码

代码语言:javascript
复制
$arr = [
    'tqty' => 9,
    'tPrice' => 18700,
    'food_name_1' => 'Black Coffee',
    'food_quanty_1' => 1,
    'food_price_1' => 1000,
    'food_name_2' => 'Sub Combo',
    'food_quanty_2' => 2,
    'food_price_2' => 3000
];

$newdat = [];
$count = 0;
$oldcount = 1;
foreach($arr as $key => $value){
    if(preg_match_all('!\d+!', $key, $matches)){

        if($oldcount == $matches[0][0]){
            $newdat[$matches[0][0]] = [
                $count => [
                    $key => $value
                ]
                ];
        } else{
            $count = 0;
            $oldcount = $matches[0][0];
        }
    }
    $count++;
 }

我希望我能尽快得到帮助。谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-06-15 06:53:14

如果我没理解错的话,

代码语言:javascript
复制
$newdata = array();
for ($i = 1; $i++;) { // Intentionally no condition set.
    if (array_key_exists('food_name_' . $i, $arr)) {
        $temparray = array();
        $temparray['food_name_' . $i] = $arr['food_name_' . $i];

        if (array_key_exists('food_quanty_' . $i, $arr)) {
            $temparray['food_quanty_' . $i] = $arr['food_quanty_' . $i];
        }
        if (array_key_exists('food_price_' . $i, $arr)) {
            $temparray['food_price_' . $i] = $arr['food_price_' . $i];
        }
        $newdata[] = $temparray;
    } else {
        break; // break out of the loop
    }
}

echo "<pre>";
print_r($newdata);
echo "</pre>";
die();
票数 0
EN

Stack Overflow用户

发布于 2018-06-15 06:44:12

假设数组键和顺序保持一致,您可以使用array_chunk

代码语言:javascript
复制
<?php 

$inArray = [
    'tqty' => 9,
    'tPrice' => 18700,
    'food_name_1' => 'Black Coffee',
    'food_quanty_1' => 1,
    'food_price_1' => 1000,
    'food_name_2' => 'Sub Combo',
    'food_quanty_2' => 2,
    'food_price_2' => 3000,
];

$outArray = [];

// Remove first 2 values.
$inArray = array_slice( $inArray, 2 );

// 'Chunk' the rest of the values.
// true preserves keys.
$outArray = array_chunk( $inArray, 3, true );

echo '<pre>' . print_r( $outArray, true ) . '</pre>';

/**
    Output:

    <pre>Array
    (
        [0] => Array
            (
                [food_name_1] => Black Coffee
                [food_quanty_1] => 1
                [food_price_1] => 1000
            )

        [1] => Array
            (
                [food_name_2] => Sub Combo
                [food_quanty_2] => 2
                [food_price_2] => 3000
            )

    )
    </pre>
 */
票数 3
EN

Stack Overflow用户

发布于 2018-06-15 06:48:14

这是一个解决方案,它将在末尾定位_x,以检查其数字

这个解决方案并不关心您有多少未编号的字段,或者每个编号的“行”有多少字段,它们也是基于_x编号进行索引的。

代码语言:javascript
复制
$arr = [
  'tqty' => 9,
  'tPrice' => 18700,
  'food_name_1' => 'Black Coffee',
  'food_quanty_1' => 1,
  'food_price_1' => 1000,
  'food_name_2' => 'Sub Combo',
  'food_quanty_2' => 2,
  'food_price_2' => 3000
];

$arr2 = array();

foreach( $arr as $key => $value )
{
  $explode = explode( '_', $key );
  if( ctype_digit( $index = end( $explode ) ) === true)
  {
    if( isset( $arr2[ $index ] ) === false )
    {
      $arr2[ $index ] = array();
    }
    $arr2[ $index ][ substr( $key, 0, strlen( $key ) - 1 - strlen( $index ) ) ] = $value;
  }
}

print_r( $arr2 );

输出:

代码语言:javascript
复制
Array
(
    [1] => Array
        (
            [food_name] => Black Coffee
            [food_quanty] => 1
            [food_price] => 1000
        )

    [2] => Array
        (
            [food_name] => Sub Combo
            [food_quanty] => 2
            [food_price] => 3000
        )

)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50866828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档