重複の可能性:
特定の値に基づいて配列を分割する方法は?
分割したい配列の例を次に示します。
(0, 1 ,2 ,3, 0, 4, 5)
このように2つの配列に分割するにはどうすればよいですか?
(0, 1 ,2 ,3) (0, 4, 5)
基本的に、要素の値がゼロかどうかを確認し、別のゼロが見つかるまですべての要素の配列を作成したいと考えています。私はこれに対する解決策を思い付くことができないようです。
重複の可能性:
特定の値に基づいて配列を分割する方法は?
分割したい配列の例を次に示します。
(0, 1 ,2 ,3, 0, 4, 5)
このように2つの配列に分割するにはどうすればよいですか?
(0, 1 ,2 ,3) (0, 4, 5)
基本的に、要素の値がゼロかどうかを確認し、別のゼロが見つかるまですべての要素の配列を作成したいと考えています。私はこれに対する解決策を思い付くことができないようです。
$array = array(0, 1 ,2 ,3, 0, 4, 5);
$result = array();
$index = -1;
foreach ($array as $number) {
if ($number == 0) {
$index++;
}
$result[$index][] = $number;
}
echo print_r($result, true);
以下で終わります。
array(
0 => array(0, 1, 2, 3),
1 => array(0, 4, 5)
)
$x = -1;
$newArr = array();
$array = array(0,1,2,3,0,4,5,6);
foreach ($array as $key => $value) {
if($value == 0)
$x++;
$newArr[$x][] = $value;
}
PHP の爆発を使用して、0 が出現するたびに文字列配列に分割できますが、文字列ではなく配列であることがわかります。上記で提案したように、逆のPHP implodeを使用できます。
コメントと同様に、array_keys
検索する値 (この場合はゼロ) を含むすべてのキーを検索するために使用できます。
次に、これらの位置をループして、配列(「 」を参照array_slice
) をパーツにスライスできます。
例 (デモ):
$keys = array_keys($array, 0);
$parts = [];
$last = 0;
foreach ($keys as $key)
{
$last !== $key
&& $parts[] = array_slice($array, $last, $key - $last, true);
$last = $key;
}
$parts[] = isset($key) ? array_slice($array, $key, null, true) : $array;
このバリアントは、元のキー、例示的な$parts
出力も保持します。
array(2) {
[0] => array(4) {
[0] => int(0)
[1] => int(1)
[2] => int(2)
[3] => int(3)
}
[1] => array(3) {
[4] => int(0)
[5] => int(4)
[6] => int(5)
}
}
別の選択肢は、概説されている他のいくつかの回答に似ている可能性があります。次のバリアントもキーを保持します。
$array = [0, 1 ,2 ,3, 0, 4, 5];
$parts = [];
$index = 0;
foreach ($array as $key => $number)
{
$number == 0 and $key and $index++;
$parts[$index][$key] = $number;
}
出力 (デモ):
Array
(
[0] => Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
)
[1] => Array
(
[4] => 0
[5] => 4
[6] => 5
)
)
最初に要素を連結し、次に使用して分割し0
、次に接頭辞を付けて再度分離し0
ます。
$concatenatedStr = implode(',', $array);
$indx = 0;
$fragments = array();
$fragementStrings= explode("0,", $concatenatedStr);
foreach($fragementStrings as $fragementString) {
//you get your fragements here
$fragments[$indx++][] = explode(",", "0,".$fragementString);
}
<?php
$a=array(0, 1 ,2 ,3, 0, 4, 5);
$b =array();
$k=-1;
foreach($a as $key=>$val)
{
if($val==0)
{
$k++;
}
$b[$k][]=$val;
}
echo"<pre>";
print_r($b[0]);
print_r($b[1]);
foreach($b as $key=>$val)
{
echo"<pre>";
echo $val;
echo"</pre>";
}
?>