/ / php array shift keys Mehrdimensionales Array - PHP, Arrays, Mehrdimensionales Array

PHP-Array Shift Keys mehrdimensionales Array - PHP, Arrays, multidimensionales Array

Ich habe ein Array wie dieses.

$array = array ( "18" => array (  "1" =>"", "14" =>""),
"23" => array ( "24" =>""),
"24" => array ( "25" =>"", "26" =>""),
"26" => array ( "27" =>"", "28" =>""),
"30" => array ( "23" =>"", "31" =>"")
);

Ich möchte dieses Array so neu anordnen.

 Array
(
[18] => Array
(
[1] =>
[14] =>
)
[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)
)
)
)
)

Ich weiß die Hilfe von jemandem zu schätzen.

Antworten:

0 für die Antwort № 1

Dieses Skript ist zu nahe, aber nach 24 Index haben einige Probleme

<?php

class arrayTest
{
//create the array
public $array = array ( "18" => array ( "1" => "", "14" => ""),
"23" => array ( "24" =>""),
"24" => array ( "25" =>"", "26" =>""),
"26" => array ( "27" =>"", "28" =>""),
"30" => array ("23"=>"","31"=>"")
);

public $data = array();

public function index()
{
//data array
$data =array();

//process each key of the array
foreach($this->array as $key=>$val)
{
//check the key value
if($key==18 || $key==30)
{
//process the child array
foreach($val as $key1=>$val1)
{
//bind the expectation
$data[$key][$key1] =isset($this->array[$key1])?$this->get_array($key1):"";
}
}

}

//output
print_r($data);
}


//function process the each array
function get_array($index)
{
//process the each array
foreach($this->array[$index] as $key=>$value)
{
if(isset($this->array[$key]) && is_array($this->array[$key]))
{
foreach($this->array[$key] as $key1=>$value1)
{
//
$this->data[$key] = isset($this->array[$key1])?$this->get_array($key1):"";
}

}else{

$this->data[$key] = "";
}
}

return $this->data;
}


}


$obj = new arrayTest();

$obj->index();

0 für die Antwort № 2

2. Bearbeiten:

Ich habe meine iterative Lösung so geändert, dass die Gesamtlänge des resultierenden Arrays im Textformat überprüft wird. Wenn sich die Länge nicht geändert hat, wird die Iteration beendet.

(Geändert) Beispieldaten:

$a=array("18"=> array (  "1" =>"", "14" =>""),
"20" => array ( "32" =>""),
"23" => array ( "24" =>""),
"24" => array ( "25" =>"", "26" =>""),
"26" => array ( "27" =>"", "28" =>""),
"29" => array ( "33" =>""),
"30" => array ( "23" =>"", "31" =>""),
"32" => array ( "30" =>""),
"33" => array ( "32" =>"")
);

Code:

function plough(&$a){ // ploughs throught the array once from top to bottom ...
foreach ($a as $ak => &$av){
foreach($av as $k => &$v) {
if(isset($a[$k])) $v=$a[$k];
}
}
return strlen(print_r($a,1)); // returns string-length of print_r-output
}

// iterate until there is no change in string-length any more ...
for ($al1=1+$al0=0 ;$al0<$al1; $al1=plough($a)) $al0=$al1;
print_r($a);

Durch die Platzierung der & vor den Variablennamen in der foreach Sie arbeiten mit den Referenzen auf diese Variablen und nicht mit kopierten Werten. Das Anwenden der Routine auf mein (modifiziertes) Beispiel führt zu folgendem Ergebnis

Ausgabe:

Array
(
[18] => Array
(
[1] =>
[14] =>
)

[20] => Array
(
[32] => Array
(
[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[31] =>
)

)

)

[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

[26] => Array
(
[27] =>
[28] =>
)

[29] => Array
(
[33] => Array
(
[32] => Array
(
[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[31] =>
)

)

)

)

[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[31] =>
)

[32] => Array
(
[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[31] =>
)

)

[33] => Array
(
[32] => Array
(
[30] => Array
(
[23] => Array
(
[24] => Array
(
[25] =>
[26] => Array
(
[27] =>
[28] =>
)

)

)

[31] =>
)

)

)

)