1

1から5までの値を持つ一連の配列があります。ほとんどすべての配列に値がありません。値がない配列もあります。私の目的は、欠落している値を0で埋めることです。これらの配列はすべて多次元配列に格納されます。

私の配列は次のようになります:

Array
(
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [0] => 1
            [1] => 5
        )

    [3] => Array
        (
            [0] =>  (this array has no values)
        )

    [4] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )

    etc...

)

それがどうあるべきか:

Array
(
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 0
            [4] => 0
        )

    [2] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 5
        )

    [3] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

    [4] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )

    etc...

)

どんな助けでも適用されるでしょう!

4

4 に答える 4

2

サブアレイごとに、1から5までの数値をループし、その値が存在する場合は、そのキーをその値より1つ小さい値に設定します。

$newarray = array();

foreach($arr as $key => $subarr) {
    for ($i = 1; $i <= 5; $i++) {
        if (in_array($i, $subarr)) $newarray[$key][$i - 1] = $i;
        else $newarray[$key][$i - 1] = 0;
    }
}

ここ$newarrayに出力があり、$arrは入力配列です。

于 2012-11-22T22:03:49.040 に答える
1

このようなもの(array_pad()トリックを行いません)。$myArrayソース配列です。完成した配列は次の場所に返され$resultます:

$result = array();
foreach( $myArray as $subKey=>$subArray ) {
  for( $i=0; $i<5; $i++ ) {
    if( isset( $subArray[$i] )) {
       $result[$subKey][$i] = $subArray[$i];
    } else {
      $result[$subKey][$i] = 0;
    }
  }
}

配列のコピーを行うことに注意してください。配列をインプレースで埋めることはできません。

于 2012-11-22T22:02:43.623 に答える
1

PHPは実際には多次元配列を実行しないことに注意してください。2つのフラットな配列を関連付けることしかできませんが、これは真の多次元性ではありません。

これは機能せず、上記の結果が生成されます。

$ menu [1]="私のトレーニング"; // $ menu[1][0]ではありません

$menu[1][1] = "To Do List";
$menu[1][2] = "Catalog";
$menu[1][3] = "Self-Report";
$menu[1][4] = "Completions";

$ menu [2]="マネージャー";

$menu[2][1] = "Direct Reports";
$menu[2][2] = "Incompletes";
$menu[2][3] = "Completions";

$ menu [3]="インストラクター";

$menu[3][1] = "My Classes";
$menu[3][2] = "Printables";
$menu[3][3] = "Qualifications";

これは機能します。

$ menu [1]="私のトレーニング"; // $ menu[1][0]ではありません

$submenu[1][1] = "To Do List";
$submenu[1][2] = "Catalog";
$submenu[1][3] = "Self-Report";
$submenu[1][4] = "Completions";

$ menu [2]="マネージャー";

$submenu[2][1] = "Direct Reports";
$submenu[2][2] = "Incompletes";
$submenu[2][3] = "Completions";

$ menu [3]="インストラクター";

$submenu[3][1] = "My Classes";
$submenu[3][2] = "Printables";
$submenu[3][3] = "Qualifications";

$ submenuには最初のディメンション値がないため、$submenuは最初のキー番号を介して$menuにのみ関連しています。

于 2012-11-23T19:53:40.533 に答える
-1

PHPを作成してから何年も経ちますが、このようなものでうまくいくかもしれません。

for($i = 0; $i < 5; $i++)
{
  if(empty($myArray[$i])
  {
    $myArray[$i] = 0;
  }
}
于 2012-11-22T22:01:46.583 に答える