php dizi dönüşüm

7 Cevap php

nasıl bu dizi dönüştürmek istiyorsunuz:

Array
(
    [0] => Array
        (
            [Contact] => Array
                (
                    [number] => 0425 234 634
                )

        )

    [1] => Array
        (
            [Contact] => Array
                (
                    [number] => 2939 492 235
                )

        )

)

bu diziye

Array
(
    [0] => 0425 234 634
    [1] => 2939 492 235
)

?

7 Cevap

Çok kirli bir yöntem olsa da, sizin için bunu yapmak için bir işlevi olduğunu sanmıyorum.

foreach($array1 as $key => $value) {
    $array2[$key]=$value['contact']['number'];
}

EDIT:

Aslında, array_values, bazı yardımcı olabilir multi-boyutlu bir dizi karşı test değerinde olacaktır.

Bkz Set::extract() Bu dizide yolları düğüm değerleri ayıklamak için XPath ifadesi kullanır.

$ Numbers = Set :: özü ('/ İletişim / numara', $ sayılar);

Burada önerilen diğer örneklerden çok daha anlaşılabilir kod 1 doğrultusunda tüm bu başarmak.

CakePHP kullanarak beri, bir yer utility library Eğer ihtiyacınız yok sadece ne var.

$a = array(
    0 => array(
        'Contact' => array(
                'number' => "0425 234 634"
        )
    ),
    1 => array(
        'Contact' => array(
                'number' => "2939 492 235"
        )
    )
);

$b = Set::classicExtract($a, '{n}.Contact.number');

print_r($b);

Ve sonuç:

Array
(
    [0] => 0425 234 634
    [1] => 2939 492 235
)

Ben sadece sonuçları saklamak için ayrı bir dizi kullanarak çözümler gördüm, bu gibi iyi çalışır:

<?php
    foreach($numbers as $key => $number) {
        $numbers[$key] = $number['Contact']['number'];
    }
?>

Burada, tamamen işlevsel ve özgün dizi hakkında herhangi bir varsayım olmadan gitmek :)

<?php
$array = array(
    0 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
    1 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
    2 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
);


function flattenArray(array $arr, &$newArr) {
    while($array = array_shift($arr)) {
        if(is_array($array)) {
            flattenArray($array, $newArr);
        } else {
            $newArr[] = $array;
        }
    }
}

$newArr = array();

foreach($array as $key => $value) {
    flattenArray($value, $newArr);
}
class DeepCollect {
  protected $arr = array();

  public function collect($item, $key) {
    $this->arr[] = $item;
  }

  public static function collect_all($array) {
    $collect = new self;
    array_walk_recursive($array, array($collect, "collect"));
    return $collect->arr;
  }
}

print_r(DeepCollect::collect_all($input_array));

Bakılmaksızın tuş kombinasyonları herhangi bir iç içe-dizi için çalışacaktır.

Bu ile de çalışır

Set:extract( "{n}.Contact.number", $a );
Set::extract( "/number", $a );