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 № 1Dieses 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] =>
)
)
)
)