x/y座標と方向情報(横または下)を含むデータの配列を取り、共有セルを増分番号でリンクしようとしています。クロスワードパズル用です。元の配列は次のとおりです。
Array
(
[0] => Array
(
[id] => 1
[puzzle_id] => 1
[word] => hello
[hint] =>
[direction] => across
[grid_x] => 3
[grid_y] => 1
)
[1] => Array
(
[id] => 2
[puzzle_id] => 1
[word] => loot
[hint] =>
[direction] => down
[grid_x] => 5
[grid_y] => 1
)
[2] => Array
(
[id] => 3
[puzzle_id] => 1
[word] => hellotest
[hint] =>
[direction] => down
[grid_x] => 3
[grid_y] => 1
)
[3] => Array
(
[id] => 4
[puzzle_id] => 1
[word] => looking
[hint] =>
[direction] => across
[grid_x] => 3
[grid_y] => 3
)
)
1 から始まり、1 ずつ増加する「num」という各エントリに新しいキーを追加したいのですが、トリッキーな部分は、開始セルを共有している場合 (grid_x と grid_y を共有する場合)、同じ番号を共有するために上下に移動する必要があることです。 )。これは私が今持っているコードですが、探している正しい数値を生成しません。
$puzzle_data2 = $puzzle_data;
$across_counter = 1;
foreach($puzzle_data as $rkey=>$row)
{
if($row['direction'] == 'across')
{
$puzzle_data[$rkey]['num'] = $across_counter++;
foreach($puzzle_data2 as $rkey2=>$row2)
{
if($row['direction'] == 'down')
{
if($row['grid_x'] == $row2['grid_x'] && $row['grid_y'] == $row2['grid_y'])
{
$puzzle_data[$rkey2]['num'] = $across_counter;
break;
}
}
}
}
}
foreach($puzzle_data as $rkey=>$row)
{
if(!isset($row['num']))
{
$puzzle_data[$rkey]['num'] = $across_counter++;
}
}
私はこの結果を得ることになります:
Array
(
[0] => Array
(
[id] => 1
[puzzle_id] => 1
[word] => hello
[hint] =>
[direction] => across
[grid_x] => 3
[grid_y] => 1
[num] => 1
)
[1] => Array
(
[id] => 2
[puzzle_id] => 1
[word] => loot
[hint] =>
[direction] => down
[grid_x] => 5
[grid_y] => 1
[num] => 3
)
[2] => Array
(
[id] => 3
[puzzle_id] => 1
[word] => hellotest
[hint] =>
[direction] => down
[grid_x] => 3
[grid_y] => 1
[num] => 4
)
[3] => Array
(
[id] => 4
[puzzle_id] => 1
[word] => looking
[hint] =>
[direction] => across
[grid_x] => 3
[grid_y] => 3
[num] => 2
)
)
ID 1 と 3 の両方が「1」になるように探しています。下向きと横向きが同じ開始セルを共有し、横向きキーと下向きキーで同じ数字がラベル付けされているクロスワード パズルについて考える場合、それが私のデータ セットで達成しようとしていることです。
御時間ありがとうございます。